AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 124093
Accepted
Zilk
Zilk
Asked: 2015-12-19 09:18:01 +0800 CST2015-12-19 09:18:01 +0800 CST 2015-12-19 09:18:01 +0800 CST

从文件将 PostgreSQL 数据库(或数据库名称)恢复到新版本?

  • 772

简而言之:

  • 开发笔记本电脑坏了
  • 旧硬盘仍然可读
  • 新笔记本电脑有 PostgreSQL 9.4 而不是 9.1
  • 两台笔记本电脑都使用 Ubuntu Linux 的风格

问题 1:我的理解是否正确,为了恢复旧数据,我需要一台与写入旧数据目录的服务器具有相同主版本和次版本的服务器?由于我的发行版没有可用的 9.1 包,我必须从源代码编译一个 v9.1.x 服务器,复制旧数据,启动服务器并执行正常的 pg_dump,然后可以将其恢复到新集群?

问题2:旧笔记本上大概有10-15个数据库,但因为是开发机,理论上除了一些本地实验外,所有的数据都应该是可以替换的。我正在考虑只是废弃旧数据,但我不能 100% 确定那些数据库是什么。有没有办法在不运行 9.1 服务器的情况下从旧数据目录中提取一些基本信息(例如数据库名称,甚至大小或时间戳)?

postgresql linux
  • 2 2 个回答
  • 159 Views

2 个回答

  • Voted
  1. Best Answer
    Josh Kupershmidt
    2015-12-19T13:05:23+08:002015-12-19T13:05:23+08:00

    看起来您已经自己解决了问题 1(简短回答:是的,使用最新的 9.1.x 版本,并确保编译时选项在旧机器和新机器上的版本之间相同,以确保数据目录,理想情况下机器应该尽可能相似以便二进制兼容,例如 x86-64,相似的 glibc 版本等)。

    但是关于问题2:

    有没有办法提取一些基本信息(例如数据库名称,甚至大小或时间戳)

    你可以在数据目录的“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 中确定数据库名称,但至少您知道有多少个数据库以及它们应该有多大。你也应该能够通过检查来计算出创建时间stat。在我的例子中,“1”代表“template1”,“12292”代表“template0”,其余的是其他各种数据库。

    • 2
  2. Zilk
    2016-01-15T03:06:26+08:002016-01-15T03:06:26+08:00

    我刚刚发现了一种方法来找出旧PG_DATA目录包含哪些数据库。这有点骇人听闻,对我来说为时已晚,但将来可能对其他人有用。

    有关数据库名称(等)的信息不存储在 中PG_DATA/base,而是存储在PG_DATA/global. 该目录中的文件(至少就我而言)足够小,可以使用十六进制编辑器或命令行工具进行检查,例如grep和strings:

    $ cd /usr/local/pgsql-9.1/data/global
    $ grep template1 *
    Binary file 59402186 matches
    Binary file 59402192 matches
    $ ls -la 59402186 59402192
    -rw------- 1 postgres postgres 8.0K Nov 25 09:50 59402186
    -rw------- 1 postgres postgres  16K Nov 25 09:50 59402192
    

    默认内部数据库之一的名称“template1”仅在两个小文件中以纯文本字符串形式出现。在这些文件中查找其他字符串会显示其他数据库名称:

    $ strings 59402186 | sort | uniq
    blank0
    blank1
    de_AT.iso88591
    de_AT.utf8
    deepend
    en_US.utf8
    footest
    channelwerk
    lnfbase
    lnfbase10
    mok_db_bio
    postgres
    tin_phoenix
    sunn
    sunn_bkp20151031
    template0
    template1
    upside
    

    删除标准 PG 数据库和字符集名称,这留下了我最初寻找的数据库名称列表:

    deepend
    footest
    channelwerk
    lnfbase
    lnfbase10
    mok_db_bio
    tin_phoenix
    sunn
    sunn_bkp20151031
    upside
    
    • 0

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve