1.使用copy备份
COPY (SELECT * FROM nyummy.cimory WHERE city = 'tokio') TO '/path/to/file.csv' (DELIMITER '|');;
假如没有权限执行copy语句,可用下面的语句代替
PGPASSWORD='ellis' psql -c "COPY (SELECT * FROM public.test) TO STDOUT (DELIMITER '|');" -h localhost -d postgres -U ellis -p 5432 > /home/ellis/test.csv;
- 使用pgdump备份
sudo PGPASSWORD='111' pg_dump -h host -p port-U username -d database --data-only --inserts -t tablename > /tmp/tablename.sql
- 使用copy回滚
copy nyummy.cimory FROM '/home/admin/test.csv' DELIMITER '|' Null as '\N'
假如没有权限执行copy语句,可用下面的语句代替
PGPASSWORD='ellis' psql -c "copy public.test FROM '/home/ellis/test.csv' DELIMITER '|' Null as '\N'" -h localhost -d postgres -U ellis -p 5432;
- 使用psql运行插入sql文件进行回滚
PGPASSWORD=111 psql -h host -p port-U username -d database -f /tmp/tablename.sql
- 大文件分割
假如csv很大,可以运行以下命令进行分割,分割后每个文件含有1000000行,存在/home/ellis/data目录下
split -dl 1000000 /home/ellis/ellis.csv /home/ellis/data/data_ --additional-suffix=.csv
关于数据表备份与还原,推荐使用copy命令,因为copy更快,而且copy是在一个事务里做的操作,一行失败,就全都失败
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.Copy.html