情景简而言之:
>开发笔记本电脑坏了
>旧硬盘仍然可读
>新笔记本电脑有PostgreSQL 9.4而不是9.1
>两款笔记本电脑都使用Ubuntu Linux
问题1:我的理解是否正确,为了恢复旧数据,我需要一个与编写旧数据目录的服务器具有相同主要次要版本的服务器?由于没有9.1软件包可用于我的发行版,我必须从源代码编译v9.1.x服务器,复制旧数据,启动服务器并执行正常的pg_dump,然后可以将其恢复到新集群?
问题2:旧笔记本电脑上有大约10-15个数据库,但由于它是一台开发机器,理论上除了一些本地实验外,所有数据都应该是可替换的.我正在考虑废弃旧数据,但我不记得100%确定这些数据库是什么.有没有办法从旧数据目录中提取一些基本信息(如数据库名称,甚至可能是大小或时间戳)而不运行9.1服务器?
解决方法:
看起来你已经为自己找到了问题1(简答:是的,使用最新的9.1.x版本,并确保旧机器和新机器上的版本之间的编译时选项相同,以确保数据目录,理想情况下,机器应尽可能相似,以便二进制兼容,例如x86-64,类似的glibc版本等.
但关于问题2:
Is there a way to extract some basic information (such as database names, maybe even sizes or timestamps)
您可以查看数据目录的“base”子目录,您应该看到如下内容:
/datadir/base $du -sh *
6.5M 1
6.1M 12292
6.5M 12297
39M 3237152
6.3M 371336
10M 4049006
41M 4481732
6.7M 4691247
10M 4927721
7.2M 4927722
7.4M 58068
0B pgsql_tmp
每个以整数作为目录名的目录表示我的PostgreSQL集群中的数据库.目录名中的整数(OID)与您从查询中看到的oid匹配,如:
SELECT oid, datname FROM pg_database;
如果你有服务器运行.我不知道在没有运行服务器的情况下从这些OID确定数据库名称的简单方法,但至少你知道有多少数据库以及它们应该有多大.你应该能够通过检查统计数据来计算创建时间.在我的例子中,“1”表示“template1”,“12292”表示“template0”,其余的是各种其他数据库.