我最近一直在玩PostgreSQL,并且无法理解如何备份和恢复单个表.
我使用pgadmin3备份数据库中的单个表,以便将其复制到其他服务器.当我尝试对文件执行pg_restore时,我收到错误消息,指出该序列不存在:
pg_restore: [archiver (db)] could not execute query: ERROR: relation "businesses_id_seq" does not exist
Command was:
CREATE TABLE businesses (
id integer DEFAULT nextval('businesses_id_seq'::regclass) NOT NULL,
name character varyin...
Run Code Online (Sandbox Code Playgroud)
看起来转储文件不包含我的自动递增列的序列.如何将其包括在内?
我有自己的机器与postgres dmp文件,我想在我的网络中恢复远程虚拟机(例如IP是192.168.0.190和postgres端口是5432).是否可以使用pg_restore恢复此转储而无需将转储复制到远程计算机?因为转储大小约为12GB,虚拟机上的磁盘空间为20GB.谢谢
我必须备份我的数据库,但是当我右键单击数据库然后备份时,禁用备份按钮.同样在现有数据库中,由于"还原"按钮太禁用而无法还原.我工作正常,直到我创建一个新的数据库.
它们是如何启用的?
假设我有两台主机服务器s1和s2.在这两个服务器中我都有一个名为n1的模式,现在我对s1的模式n1中的一些表进行了一些更改.我希望对服务器s2的模式n1进行相同的更改.我打算做的是使用pg_dump备份服务器s1的模式n1,并使用pg_restore在服务器s2中恢复.现在我的问题是,因为服务器s2中已经存在具有相同表集的相同模式n1.恢复过程会做什么?它会覆盖现有的表还是应该删除服务器s2的现有模式并使用服务器s1的转储来恢复它?
pg_dump版本10.3开始明确地将模式名称添加到表名.那是过去的
INSERT INTO table (id) VALUES (1);
Run Code Online (Sandbox Code Playgroud)
就是现在
INSERT INTO public.table (id) VALUES (1);
Run Code Online (Sandbox Code Playgroud)
你怎么能把它关掉?我的问题是,我将其转储到没有模式名称的mariadb中.
我正在使用pg_dump和pg_restore来备份和恢复postgres数据库.
以下是与此问题相关的文档中的一些信息.对于Pg_restore,-C选项描述如下
-C
- 创建
在还原到数据库之前创建数据库.如果还指定了--clean,则>> drop并在连接之前重新创建目标数据库.使用此选项时,使用-d命名的数据库仅用于发出初始DROP DATABASE和CREATE DATABASE命令.所有数据都将还原到存档中显示的数据库名称中.
但是,即使我在pg_restore中使用此选项,也会出现以下错误
pg_restore:[archiver(db)]与数据库"test"的连接失败:致命:>数据库"test"不存在
根据描述,-C选项应该创建缺少的数据库.但是在我的情况下并不适用.
以下是我为备份和还原所做的步骤:
pg_dump -N backup -d test --format custom -v -h xxhostxx -p 5432 -U xxuserxx --lock-wait-timeout 300000 -f test_pg_dump.dmp
Run Code Online (Sandbox Code Playgroud)
注意:不使用-C选项,因为它仅对纯文本格式有意义
删除了测试数据库
使用pg_resore恢复数据库
pg_restore -C -d test -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
Run Code Online (Sandbox Code Playgroud)我无法理解这里的问题是什么!我做错了吗?如果需要更多信息,请与我们联系.
我正在尝试使用以下命令将数据库转储到本地系统中:
pg_restore --host=localhost --port=5432 --dbname=dev_db --no-owner --no-privileges db_dump_new.backup
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
pg_restore: [archiver] input file is too short (read 0, expected 5)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
命令:
bin/pg_dump -b -o -Fc -Z 0 -p 5333 -U user template1 -f db.dump
bin/pg_restore -c -h localhost -p 5333 -U user -d template1 db.dump
Run Code Online (Sandbox Code Playgroud)
步骤如下:
将新表添加到DB并进行转储
删除新添加的表
尝试使用转储文件还原
使用代码1恢复退出但仍然可以成功恢复表.
pg_restore中的错误:
pg_restore:[archiver(db)]无法执行查询:err-1:表"test1"不存在
命令为:DROP TABLE public.test1;
警告:恢复时忽略错误:2
这是带有表添加/删除步骤的转储/恢复功能的预期行为吗?
UserX有以下授权:
CREATE ROLE "UserX" LOGIN PASSWORD 'pass';
CREATE DATABASE "DBX" WITH OWNER="UserX" ENCODING='UTF8' TABLESPACE=pg_default CONNECTION LIMIT=-1;
GRANT CONNECT ON DATABASE "DBX" TO "UserX";
GRANT USAGE ON SCHEMA public TO "UserX";
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO "UserX";
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO "UserX";
ALTER DEFAULT PRIVILEGES GRANT ALL ON SEQUENCES TO "UserX";
Run Code Online (Sandbox Code Playgroud)
尝试将其转储还原到其他数据库时出现以下错误:
pg_restore: creating SEQUENCE "public.tblX_Id_seq"
pg_restore: [archiver (db)] Error from TOC entry 218; 1259 438745 SEQUENCE tblX_Id_seq UserX
pg_restore: [archiver (db)] …Run Code Online (Sandbox Code Playgroud) 我正在研究Postgres DVD教程,并且遇到导入其示例数据库的问题.
跑步pg_restore -U postgres -d dvdrental ~[filepath]/dvd-database.tar.gz给了我pg_restore: [archiver] input file does not appear to be a valid archive.
到目前为止,我的流程如下:
tar czf dvd-database.tar.gz dvdrental.zip(我也尝试将zip解压缩到一个文件夹,结果相同,并删除.gz)将其解压缩到.tarpg_restore -U postgres -d dvdrental ~[filepath]/dvd-database.tar如上所述运行.我目前正在使用Postgres 9.5,这可能会导致问题.寻找答案,指出我在这个过程中出错的地方或如何将Postgres数据库的存档更新到9.5.
pg-restore ×10
postgresql ×10
pg-dump ×4
backup ×1
database ×1
dump ×1
pgadmin ×1
psql ×1
tar ×1