是否可以PostgreSQL
仅使用一小部分数据(每个表中的 1000 行)来备份数据库?
我可以使用pg_dump
. 在某些情况下,我需要具有最少数据的数据库。
pg_dump --host=localhost --port=5432 --username=postgres --password
--column-inserts --schema=test testdb > test_backup.sql
Run Code Online (Sandbox Code Playgroud)
如何修改上述命令以备份 1000 条数据?
小智 5
我遇到了类似的问题,我想将几个表中的最新行从一个数据库复制到另一台服务器上托管的另一个数据库,最后我编写了一个 bash 脚本,该脚本执行命令,pg_dump
然后执行各种psql
命令:
#!/bin/bash
declare -a arr=("my_table_1" "my_table_2" "my_table_3")
startdate=2014-12-01
enddate=2014-12-30
for table in "${arr[@]}"
do
echo -e \\n$table\\n$(for each in $(seq 1 ${#table}); do printf "-"; done)
pg_dump -h host_name_1 --schema-only -t $table db_name_1 -U my_username -c | psql -h host_name_2 -U my_username db_name_2
psql -h host_name_1 -U my_username db_name_1 -c "\copy (select * from $table where date >='$startdate' and date <='$enddate' order by date desc) to '/tmp/data.csv' csv header;"
psql -h host_name_2 -U my_username db_name_2 -c "\copy $table from '/tmp/data.csv' csv header"
done
Run Code Online (Sandbox Code Playgroud)
循环体中逐行:
echo
只是一个漂亮的修饰:它打印表的名称并像标题一样在其下划线,pg_dump
命令生成一些 SQL 来从源复制表模式,并执行更多 SQL 内务命令(例如,该-c
标志意味着 SQL 将包含一个在创建表之前先删除该表的命令),并且该 SQL 通过管道传输|
到psql
指向目标(您可以尝试仅运行pg_dump
命令行中的部分,pg_dump -h host_name_1 --schema-only -t $table db_name_1 -U my_username -c
并查看它生成的 SQL),psql
行将源数据库中的表复制到 csv 文件中,psql
副本到目标数据库中的表中。小智 1
仅通过命令无法实现此目的pg_dump
。
您可以通过以下方式做到这一点:
仅转储整个数据库的结构,并使用命令copy
从each表中保存1000行。
例如:仅转储结构:
pg_dump --host=localhost --port=5432 --username=postgres --password --schema-only testdb > test_backup.sql
Run Code Online (Sandbox Code Playgroud)
以及从存储过程调用的复制命令列表:
CREATE OR REPLACE FUNCTION _save_top_1000_row_tables(chemin file_path)
RETURNS character varying AS
$BODY$declare
_temps timestamp without time zone;
begin
execute 'copy (SELECT * FROM table1 limit 1000 offset 0) TO ''' || file_path||'table1.txt''';
execute 'copy (SELECT * FROM table2 limit 1000 offset 0) TO ''' || file_path||'table2.txt''';
execute 'copy (SELECT * FROM table3 limit 1000 offset 0) TO ''' || file_path||'table3.txt''';
return ('OK');
end;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8813 次 |
最近记录: |