标签: pg-dump

PostgreSQL 9.3:pg_dump 由于tiger.direction_lookup 失败

我正在尝试从我的 PostgreSQL 9.3+PostGIS 数据库之一转储模式:

/usr/lib/postgresql/9.3/bin/pg_dump --schema-only 
                                    -h stg-db.....rds.amazonaws.com 
                                    -U user_name db_name > stg_db_schema.sql
Run Code Online (Sandbox Code Playgroud)

该命令在我的开发数据库上运行良好,但由于以下原因在 stg 和 prod 上失败:

pg_dump: [archiver (db)] query failed: ERROR:  permission denied for relation direction_lookup
pg_dump: [archiver (db)] query was: LOCK TABLE tiger.direction_lookup IN ACCESS SHARE MODE
Run Code Online (Sandbox Code Playgroud)

问题似乎是tiger.direction_lookup. 我用谷歌搜索了一下,这张表似乎与 PostGIS 有关。

我试过--exclude-table-data=tiger.direction_lookup,没有效果(无论如何它都不应该适用于模式)。

知道如何转储我的数据库的架构吗?

postgis aws postgresql-9.3 pg-dump amazon-rds

4
推荐指数
1
解决办法
2375
查看次数

pg_dump 不支持 -n

我正在使用 pg_dump(9.2 数据库)来提取一个模式并将其加载到另一个数据库(9.4)中。

好吧,这是命令:

pg_dump -f file.sql -F plain --inserts -n 模式数据库

好的。我的命令完成得非常好,但是,它并没有将所有内容转储到名为 schema 的模式(在上面的示例中)。它将所有内容加载到公共环境中。

编辑

为了使问题更清楚:

转储工作正常。经过检查,它正在将 my 转储schema.tablepublic.table。我希望将其恢复到架构,而不是公开的。

有什么解决这个问题的建议吗?

谢谢

postgresql backup pg-dump

4
推荐指数
1
解决办法
1653
查看次数

pg_dump PostgreSQL 中 .dump 和 .sql 之间的差异

我正在尝试使用 pg_dump 对模式进行备份,例如,

$ pg_dump -U ganapathy -n hotel_management > ganapathy_schema.dump
Run Code Online (Sandbox Code Playgroud)

它创建了备份,但我无法使用pg_restore. 它给出这样的错误,

pg_restore: [archiver] 输入文件似乎不是有效的存档

然后我尝试使用 . sql扩展像,

$ pg_dump -U ganapathy -n hotel_management > ganapathy_schema.sql
Run Code Online (Sandbox Code Playgroud)

但它也给出了同样的错误。

pg_restore: [archiver] 输入文件似乎不是有效的存档

之后,我尝试通过-Fc.dump.sql扩展中指定格式来进行备份。然后我尝试恢复它。它成功恢复。

所以现在我的怀疑是,

PostgreSQL 中 pg_dump 中 .dump 和 .sql 的扩展名有什么区别?

因为两者都需要指定格式。

提前致谢...

postgresql format pg-dump pg-restore

4
推荐指数
1
解决办法
6344
查看次数

如何防止 pg_dump 生成“SET default_table_access_method=heap;”?

我有一个由 PostgreSQL v12 客户端附带生成的大转储文件pg_dump,它是自定义格式而不是纯 sql 文本。服务器的版本也是 PostgreSQL v12。

现在我需要将文件重新加载到 PostgreSQL v11 服务器中,并收到一条错误消息:

unrecognized configuration parameter "default_table_access_method"
Run Code Online (Sandbox Code Playgroud)

我猜测这个参数是PG12引入的,所以PG11无法识别它,即使我使用12版本的pg_restore.

由于该文件很大且采用二进制格式,因此我无法编辑它以手动删除该行。

pg_restore test_file -f plain.sql使用测试转储文件对此进行了测试,看起来可以正常工作,并且我可以从纯 SQL 文件中删除该行。但真实的转储文件约为 30GB,从二进制文件扩展的纯 SQL 文件可能更大(工作数据库占用 300GB 磁盘空间)。

有没有办法,我可以干净地将其重新加载到 PG11 中,而无需“SET default_table_access_method = heap;”行?

其实下面这些都可以忽略,因为都是默认值:

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security …
Run Code Online (Sandbox Code Playgroud)

postgresql pg-dump downgrade pg-restore postgresql-12

4
推荐指数
1
解决办法
5755
查看次数

使用 pg_dump 制作数据库的精确副本的正确方法是什么?

基本上,我正在尝试制作一个 SQL 转储来制作数据库的精确副本:用户定义的函数、关系、约束、表、数据等。

这是可行的pg_dump还是psql需要使用?

我一直在使用pg_dump -U user -cOx database > pg.sql,但我并不完全清楚它是否捕获了所有内容

我正在查看pg_dump这里的所有标志:

https://www.postgresql.org/docs/11/app-pgdump.html

我能想到的唯一一个可能会这样做的,因为它并没有真正明确地说,是-s --schema-only标志,它排除了数据。我对此很好,并pg_dump为数据运行了一秒钟,但我主要想确保我正在备份用户定义的函数、关系等。

postgresql backup pg-dump postgresql-11

4
推荐指数
1
解决办法
275
查看次数

pg_dump 自定义存档并创建备份日期

我有由pg_dump.

它是否包含备份创建日期?

我不能自己创建备份。我通过特定的网络频道收到存档文件。备份文件有接收日期时间戳,但没有在服务器上创建的日期。

postgresql pg-dump

3
推荐指数
1
解决办法
517
查看次数

在坏的 pg_dump 日志中寻找什么

我们希望以编程方式检测 cron 调度的 pg_dumps 中的错误。

除了检查日志文件是否以“pg_dump:保存数据库定义”结尾:

为了以编程方式检查转储,我还可以grep 其他什么字符串。

postgresql monitoring dump pg-dump

2
推荐指数
1
解决办法
1万
查看次数

PostgreSQL、PostGIS:复制具有几何列的模式

根据PostGIS 手册,不应直接添加几何列,而应使用AddGeometryColumn()

\n\n
\n

AddGeometryColumn \xe2\x80\x94 将几何列添加到现有属性表中。\n

\n
\n\n

我正在将架构从一个 PostgreSQL 实例复制到另一个实例。我想知道创建的 SQL 是否足够好 - 它会像AddGeometryColumn()pg_dump一样创建几何列吗?

\n

postgresql postgis pg-dump schema-copy

2
推荐指数
1
解决办法
789
查看次数

如何将使用 pg_dump 创建的纯数据转储加载到另一个数据库?

我的开发服务器上有两个 PostgreSQL 数据库,一个用于开发,另一个用于测试 Web 应用程序的生产。当我使用早期版本的 PostgreSQL 时,我能够在 pgAdmin 中轻松创建我的 prod 数据库的 TAR 转储文件,并在选择首先清理数据库的选项后使用相同的 TAR 文件来恢复我的开发数据库。不久前,我将 pgAdmin 升级到了应该可以与 PostgreSQL 9.4 一起使用的版本(我认为是 1.20.0)。无论出于何种原因,我无法恢复该版本中的文件。我尝试过 TAR 和 SQL,但恢复按钮始终受到保护。

我决定使用pg_dump并创建一个仅包含生产数据库数据插入语句的 SQL 文件。我想做的是复制我在 pgAdmin 中能够做的事情:清理我的开发数据库并将我的pg_dumpSQL 文件加载到其中。

我已经搜索过,但到目前为止我还没有找到任何如何在 pgAdmin 或终端中执行此操作的示例。

pgadmin pg-dump postgresql-9.4

2
推荐指数
1
解决办法
1万
查看次数

pg_restore 后数据库大小不同(389 GB 与 229 GB)

我使用以下命令在 PostgreSQL 11.6(带有 TimescaleDB 1.60 扩展)中创建了数据库的备份pg_dump

PGPASSWORD=mypassword pg_dump -h 127.22.0.4 -p 5432 -U postgres -Z0 -Fc database_development
Run Code Online (Sandbox Code Playgroud)

并将其恢复到运行相同版本的 PostgreSQL 11.6(带有 TimescaleDB 1.60 扩展)的新服务器pg_restore。对于恢复,以psql用户身份执行以下命令postgres

CREATE DATABASE database_development;
\c database_development
CREATE EXTENSION timescaledb;
SELECT timescaledb_pre_restore();

\! time pg_restore -Fc -d database_development /var/lib/postgresql/backups/database_development_2020-02-29

SELECT timescaledb_post_restore();
Run Code Online (Sandbox Code Playgroud)

原始数据库的数据库大小为 389 GB,但恢复的数据库为 229 GB。这些尺寸是通过运行获得的

select pg_size_pretty(pg_database_size('database_development'))
Run Code Online (Sandbox Code Playgroud)

一些差异:

旧数据库存储在 ext4 分区上,而新数据库存储在禁用压缩的 ZFS 文件系统上。两个数据库实例都在具有 Ubuntu 18.04 主机的 Docker 容器内运行。

问题:我们如何解释数据库大小的差异?pg_dump和期间都没有遇到错误pg_restore

postgresql backup pg-dump pg-restore postgresql-11

2
推荐指数
1
解决办法
2217
查看次数

执行 pg_dump 时出现共享内存不足错误

我有一个包含 3 个模式和大约 1200 个表的 postgres 数据库。当我尝试使用命令仅获取其中的 pg_dump 模式时,pg_dump -h localhost -p 5432 -U postgres -d my_test_db -s有时会出现错误

错误:共享内存不足
提示:您可能需要增加 max_locks_per_transaction

这种情况也是随机发生的,当我重新运行相同的查询时,它运行良好。有什么方法可以克服这个问题

postgresql psql locking pg-dump

1
推荐指数
1
解决办法
8512
查看次数