我正在尝试恢复数据以选择数据库的表 (9.3.5)。这是从生产到测试的数据刷新,同时在测试数据库中维护一些表数据(如应用程序用户表)。我首先截断我计划刷新的表,然后我可以使用以下命令成功恢复 1 个表:
pg_restore -a -d ACMETEST -n public -v -U acme -t hardware /var/acme/backups/restore/ACMEDatabase.bak
,它给出以下响应,紧接着是命令提示符:!pg_restore:连接到数据库进行恢复 pg_restore:处理表“硬件”的数据 pg_restore:设置表数据硬件的所有者和权限
查询显示数据加载成功。
手册页并未表明您可以通过使用数组作为 -t 的输入来一次将数据恢复到多个表中,但我认为这是可能的,所以尝试了这个:
pg_restore -a -d ACMETEST -n public -v -U acme -t hardware,location /var/acme/backups/restore/ACMEDatabase.bak
第二个命令的结果是一行,内容如下:
然后它将我转回命令提示符,就好像命令已完成但没有加载任何数据。
我确实查看了 -L 选项以使用列表文件,但我正在尝试创建一个可重复的过程,该过程可供全国各地数据库上的许多人使用,因此我没有看到从列表中注释掉大量行的过程列表文件为每个还原具有实际成功的机会。我是否必须为我想要恢复的每个单独的表执行第一个命令,或者有什么方法可以将一组表提供给这个命令?
我在服务器上使用 PostgreSQL(版本 9.3),并且希望使用生产实例数据库中的数据更新暂存实例数据库中的数据。每个数据库都由不同的角色控制,我想在传输中保持它们的权限分开。
我尝试按照文档操作并使用单独的用户(有权访问相应的 PostgreSQL 角色)运行这些命令:
staging-user: pg_dump production_db > prod_db_file
production-user: psql --single-transaction staging_db < prod_db_file
Run Code Online (Sandbox Code Playgroud)
但我有几个错误:must be owner of extension plpgsql和syntax error at or near。此外,我不确定这是否能达到我想要的效果。pg_dump 和 psql 命令有很多可选标志,我不知道应该使用哪些。(我已经尝试了多种标志组合,但到目前为止没有任何效果。)
注意:当我尝试上述命令时,我的临时数据库已经存在。
如何将生产数据移至暂存数据库?
我正在将旧 postgres 服务器上的所有数据库转移到新服务器上。为此,我使用 pg_dumpall,然后使用 pg_restore。然而,似乎没有序列被转储。这不是我第一次遇到这个问题。我在使用 pg_dump 备份单个数据库时遇到了同样的问题。
搜索发现了一些类似的问题,但它们似乎与转储/恢复单个表有关。就我而言,我正在转储整个数据库,因此我无法弄清楚为什么序列没有得到恢复。
如何进一步调查此问题和/或解决问题,以便我不必在服务器上的每个表上重建序列?
我用来创建备份的命令:
pg_dump --host localhost --port 5432 --username "postgres" --format custom --blobs --file /home/spencerrecneps/backups/census.backup census
Run Code Online (Sandbox Code Playgroud)
我用来在干净的服务器上恢复备份的命令:
pg_restore -Cv -h localhost -p 5432 -U postgres -d postgres ./census.backup > err.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
pg_restore -l 的结果是:
;
; Archive created at Mon Sep 28 10:12:32 2015
; dbname: census
; TOC Entries: 63
; Compression: -1
; Dump Version: 1.12-0
; Format: CUSTOM
; Integer: 4 bytes
; Offset: 8 bytes
; Dumped from database …Run Code Online (Sandbox Code Playgroud) 我正在使用 pg_dump 和 pg_restore 将模式从一个 Postgresql 9.5 服务器移动到另一个。在目标服务器上:
$ pg_dump -h source.example.com -n my_schema -v --no-owner -F c -f my_schema.dump
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
...
pg_dump: saving encoding = UTF8
(dump completes with no other errors or warnings)
$ pg_restore -h 127.0.0.1 -e …Run Code Online (Sandbox Code Playgroud) 我每天在 PostgreSQL 9.3.14 数据库上运行一次 pg_dump。50 GB 大小:
pg_dump -Fc dbname > file
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,虽然pg_dump运行需要几个小时,但所有其他数据库连接都非常慢。
有什么方法可以减少pg_dump消耗的资源,或者有没有更合适的方法来创建不会大大降低数据库服务器速度的定期备份?
例如,从不同的服务器运行 pg_dump 是否有助于其工作服务器上的数据库 I/O?
出于开发目的,我们将生产数据库转储到本地。这很好,因为数据库足够小。公司在成长,我们希望降低风险。为此,我们希望在数据离开数据库服务器之前对其进行匿名化处理。
我们想到的一种解决方案是在 pg_dump 之前运行语句,但在同一个事务中,如下所示:
BEGIN;
UPDATE users
SET email = 'dev+' || id || '@example.com'
, password_hash = '/* hash of "password" */'
, ...;
-- launch pg_dump as usual, ensuring a ROLLBACK at the end
-- pg_dump must run with the *same* connection, obviously
-- if not already done by pg_dump
ROLLBACK;
Run Code Online (Sandbox Code Playgroud)
是否有现成的解决方案?我们的数据库托管在 Heroku 上,我们在转储方式上没有 100% 的灵活性。
我在下载和变体之前搜索了postgresql 匿名数据转储,但我没有看到任何高度相关的内容。
我似乎无法使用我的数据库在 Windows 上转储/恢复。使用的行和错误消息:
pg_dump -h localhost -U postgres --format=c -O -d ue > latest.dump
pg_restore -h localhost -U postgres -d ue latest.dump
Run Code Online (Sandbox Code Playgroud)
得到这个错误,
pg_restore: [archiver] 输入文件似乎不是有效的存档
有了这个,
pg_dump -h localhost -U postgres -O -d ue > latest.dump
psql -h localhost -U postgres -d ue -f latest.dump
Run Code Online (Sandbox Code Playgroud)
我收到这个错误,
psql:latest.dump:1: 错误:编码“UTF8”的字节序列无效:0xff
我完全被难住了。大多数搜索结果与不使用正确的pg_restore/psql与导出的文件类型有关pg_dump,但正如您在上面看到的,我已经考虑了这一点。
latest.dump 似乎正确填写,至少以纯格式导出我可以阅读的 SQL 并且是数据库的正确导出。
我有一个安装了 pg_cron 扩展的 PostgreSQL 9.5 服务器。testdb我正在使用以下命令创建名为的数据库的备份:
$ pg_dump -c -U postgres -Fc -f test.dump testdb
Run Code Online (Sandbox Code Playgroud)
当我尝试在已通过 yum 安装的干净 PostgreSQL 9.5 上恢复数据库时pg_cron,我看到错误消息,指出pg_cron无法安装扩展,因为plpgsql扩展不存在:
$ pg_restore -Fc -d testdb -c -U postgres test.dump
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 4; 3079 18235 EXTENSION pg_cron
pg_restore: [archiver (db)] could not execute query: ERROR: extension "pg_cron" does not exist
Command was: DROP EXTENSION pg_cron;
pg_restore: [archiver (db)] could not …Run Code Online (Sandbox Code Playgroud) 当我尝试将转储文件恢复到另一个(本地)PostgreSQL 服务器(在 Debian GNU/Linux 10.10 上运行)时,出现以下错误:
\npg_restore: error: could not execute query: ERROR: option "locale" not recognized\nRun Code Online (Sandbox Code Playgroud)\n因为它确实有以下行:
\nCREATE DATABASE "REMOTE_DB" WITH TEMPLATE = template0 ENCODING = \'UTF8\' LOCALE = \'en_GB.UTF-8\';\nRun Code Online (Sandbox Code Playgroud)\n是的,我知道PostgreSQL 12 CREATE DATABASE命令没有选项LOCALE。
我不明白的是:
\npg_dump我在本地服务器上使用的版本报告为 12.7pg_restore我在本地服务器上使用的版本报告为 12.7pg_dump是版本 12.7,而不是 13。让我一一验证一下:
\n我的本地服务器:
\n$ sudo -u postgres …Run Code Online (Sandbox Code Playgroud) pg_dump 和 pg_restore 会将 search_path 设置为空字符串,如果有函数在没有显式指定模式名称的情况下调用公共模式中的函数(即:uuid_generate_v4()vs public.uuid_generate_v4()),则会失败。
我如何强制pg_restore使用指定的 search_path 例如public?