我正在尝试从我的 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,没有效果(无论如何它都不应该适用于模式)。
知道如何转储我的数据库的架构吗?
我正在使用 pg_dump(9.2 数据库)来提取一个模式并将其加载到另一个数据库(9.4)中。
好吧,这是命令:
pg_dump -f file.sql -F plain --inserts -n 模式数据库
好的。我的命令完成得非常好,但是,它并没有将所有内容转储到名为 schema 的模式(在上面的示例中)。它将所有内容加载到公共环境中。
编辑:
为了使问题更清楚:
转储工作正常。经过检查,它正在将 my 转储schema.table到public.table。我希望将其恢复到架构,而不是公开的。
有什么解决这个问题的建议吗?
谢谢
我正在尝试使用 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 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) 基本上,我正在尝试制作一个 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为数据运行了一秒钟,但我主要想确保我正在备份用户定义的函数、关系等。
我有由pg_dump.
它是否包含备份创建日期?
我不能自己创建备份。我通过特定的网络频道收到存档文件。备份文件有接收日期时间戳,但没有在服务器上创建的日期。
我们希望以编程方式检测 cron 调度的 pg_dumps 中的错误。
除了检查日志文件是否以“pg_dump:保存数据库定义”结尾:
为了以编程方式检查转储,我还可以grep 其他什么字符串。
根据PostGIS 手册,不应直接添加几何列,而应使用AddGeometryColumn():
\n\n\n\n\nAddGeometryColumn \xe2\x80\x94 将几何列添加到现有属性表中。\n
\n
我正在将架构从一个 PostgreSQL 实例复制到另一个实例。我想知道创建的 SQL 是否足够好 - 它会像AddGeometryColumn()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 或终端中执行此操作的示例。
我使用以下命令在 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。
我有一个包含 3 个模式和大约 1200 个表的 postgres 数据库。当我尝试使用命令仅获取其中的 pg_dump 模式时,pg_dump -h localhost -p 5432 -U postgres -d my_test_db -s有时会出现错误
错误:共享内存不足
提示:您可能需要增加 max_locks_per_transaction
这种情况也是随机发生的,当我重新运行相同的查询时,它运行良好。有什么方法可以克服这个问题
pg-dump ×11
postgresql ×9
backup ×3
pg-restore ×3
postgis ×2
amazon-rds ×1
aws ×1
downgrade ×1
dump ×1
format ×1
locking ×1
monitoring ×1
pgadmin ×1
psql ×1
schema-copy ×1