error: invalid command \N
解决方法:使用custom格式导出,然后用pg_restore导入。
#导出: pg_dump -U postgres -F custom --dbname=edp --schema=mst --schema=ods --clean -f edp-mst-ods-20200805.sql 导入: pg_restore -U postgres -d edp --jobs=2 --verbose /opt/temp/edp-mst-ods-20200805.sql
ERROR: relation "t1" already exists
ERROR: duplicate key value violates unique constraint "t1_pkey"
ERROR: multiple primary keys for table "t1" are not allowed
虽然pg_dump时加了
-c, --clean
参数,但在
在导入时数据,只要有客户端和这个database存在连接,drop语句就不会执行成功,导致清理数据库失败,后续执行对应语句时会报已存在、重复键、多个主键等错误。
1. pg_dump导出时,没有选项使导出的语句中带if not exists。
2. 最好保证没有业务连接数据库时才导入,或向一个干净的数据库进行导入。
导入日志写入文件
pg_restore-U postgres -d demodib<db_20190110.dump --verbose 2>db_bkp_01_10_2019.log
数据库备份
pg_dump -U postgres edp --clean -f edp-20200526.sql -c or --clean
#在输出创建数据库对象的命令之前输出清除(删除)它们的命令
psql -v ON_ERROR_STOP=1 edp -f edp-20200526.sql >& edp-20210304-v2.sql-export-log.txt -v ON_ERROR_STOP=1
导入时在第一个错误发生时停止
备份成压缩文件
:-Fc
pg_dump -h localhost -p 6543 -U postgres -d edp --clean -Fc -f /opt/tmp/edp-pg-20200722.bak pg_restore -d edp /opt/tmp/edp-pg-20200722.bak
pg_dump -d edp --clean -Fc -f edp-pg-20210330.bak
单表备份和恢复
pg_dump -t public.dwt_totalsales_m edp_database -f dwt_totalsales_m.sql
#方法一: psql -U devuser edp -f dwt_totalsales_m.sql
#方法二:在psql里执行sql脚本 \set AUTOCOMMIT off BEGIN; ALTER TABLE emp_attendance SET UNLOGGED; \i /opt/temp/zancun.sql ALTER TABLE emp_attendance LOGGED; COMMIT;
用正则排除某些表
pg_dump -d edp --exclude-table=public.* --clean -Fc -f edp-20210409-no-public.bak
备份指定schema
DROP SCHEMA sal CASCADE; #可以先清掉相关schema下的表
pg_dump -U postgres --dbname=edp -F custom --schema=sal --clean -f edp-sal-20201028-v2.sql pg_restore -U postgres -d edp --jobs=2 --verbose /opt/temp/edp-sal-20201028-v2.sql
导出多张表
pg_dump -h 10.142.102.12 -p 8115 -U cpost -a -t acp_item_content -t acp_item_detail --inserts -f 022001_acp_dlv_20130630.sql pg_dump -d cdm --clean -t cdm_contract_item -t cdm_cust_address -t cdm_cust_address_copy -t cdm_cust_address_copyx -t cdm_deli_consigner -t cdm_deli_item -t cdm_deli_request -t cdm_deli_signoff -t cdm_deli_timesheet -t cdm_doc_attachment -t cdm_email_notice -Fc -f cdm-20210409.bak
pg_dump控制输出内容选项:
--data-only
只转储数据
--exclude-schema=SCHEMA 不转储已命名的模式
--inserts 完整的insert语句方式,在导入时会很慢,不适合稍微数据量大场景。
导出多张表1
pg_dump -U postgres --dbname=edp --schema=public --table=emp_auth* --table=edp_auth* --if-exists --clean --inserts -f edp-public-emp-auth-20201028-v4.sql psql -U postgres -d edp -f ./edp-public-emp-auth-20201028-v4.sql
导入数据
psql -d edp -U devuser -f /opt/bladex-flowable-postgresql.sql
导出表insert方式数据
pg_dump -h XXX.XXX.XXX.XXX -p XXXX -U postgres -t t1 -t t2 -t t2 -t t3
--inserts
-f data20180801.sql dbname
导出表insert方式数据, 只导单表数据
pg_dump edp_20220423 --inserts -a --column-inserts --data-only -t rdm.rdm_project_machine_info -f rdm-info-20220423.sql
备份所有数据库并还原
pg_dumpall -U postgres > pg-all-db-20201231.bakup
psql -U postgres pg-all-db-20201231.bakup
导出表结构
pg_dump
命令可以导出数据库中的表结构。
参数如下:
-s 选项用来只导出表结构,
而不会导出表中的数据
-t 选项用来指定要导出的数据库表
使用示例:
pg_dump
-s
-t tlb exampledb >
/tmp/tlb
其中,exampledb是数据库,tlb是exampledb中的表,/tmp/tlb是定向到的文件.
导入错误
ERROR: cannot drop schema sal because other objects depend on it
DROP
SCHEMA
myschema
CASCADE
;