本文共 1877 字,大约阅读时间需要 6 分钟。
数据库的导入导出是最常用的功能之一,而PostgreSQL提供的对应工具为pg_dump和pg_restore。pg_dump是用于备份PostgreSQL数据库的工具。它可以在数据库正在使用的时候进行完整一致的备份,并不阻塞其它用户对数据库的访问。
Pg_dump导出默认是COPY命令,这样的导出快,导入时候快。
--inserts 以INSERT命令,而不是COPY命令的形式转储数据
pg_dump -U postgres -d T_STATION -t nettoll.s24_exit_subshifts_new -f /usr/local/pgsql/data/s24.sql
T_STATION=# drop table nettoll.s24_exit_subshifts_new;
DROP TABLE
[postgres@pg11 ~]$ psql -d T_STATION -f /usr/local/pgsql/data/s24.sql
SET
SET
SET
SET
SET
set_config
------------
(1 row)
SET
SET
SET
SET
SET
SET
CREATE TABLE
ALTER TABLE
COMMENT
COMMENT
COPY 3469
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
GRANT
--inserts 将数据输出为的INSERT命令 (而不是 COPY). 这样会导致恢复非常缓慢.但却令归档更容易移植到其它 SQL 数据库.
-a 只导出数据
导出3至6号的数据,并删除3号和5号数据,导入看看是否成功。
select * into nettoll.s24_3_6 from nettoll.s24_exit_subshifts_new where shift_when between '2020-06-03' and '2020-06-06';
pg_dump -U postgres -d T_STATION -t nettoll.s24_3_6 --inserts -a -f /usr/local/pgsql/data/s240603.sql
select * from nettoll.s24_exit_subshifts_new where shift_when in ('2020-06-03','2020-06-05');
35条
delete from nettoll.s24_exit_subshifts_new where shift_when in ('2020-06-03','2020-06-05');
修改导出文件-改变表名
vi /usr/local/pgsql/data/s240603.sql
:%s/s24_3_6/s24_exit_subshifts_new/g
143 次替换,共 143 行
成功
[postgres@pg11 ~]$ psql -d T_STATION -f /usr/local/pgsql/data/s240603.sql
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
psql:/usr/local/pgsql/data/s240603.sql:39: ERROR: duplicate key value violates unique constraint "s24_exit_subshifts_new_pkey"
DETAIL: Key (plaza_id, lane_no, op_id, time_begin, data_source)=(100996, 2, 7660066, 2020-06-03 23:38:29, 1) already exists.
psql:/usr/local/pgsql/data/s240603.sql:40: ERROR: duplicate key value
转载地址:http://dxbai.baihongyu.com/