ube*_*ebu 17 postgresql pg-dump postgresql-9.5
我已经从带有--data-only
和--column-inserts
标志的生产服务器创建了一个新的数据库转储,因此在登台服务器上执行还原时,我只有一堆插入语句来插入数据。
pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql
Run Code Online (Sandbox Code Playgroud)
在从生产转储恢复数据之前,如何首先删除登台服务器数据库中的所有数据?
我只想删除所有数据,这样我就不必删除和创建数据库和所有这些东西。我只想删除数据并插入新数据。
由于多种原因,我无法选择删除和创建数据库。我将不得不删除所有数据并仅插入,因此无论需要找到如何执行此操作,我都愿意去做,但显然需要帮助才能开始。
我还需要自动化这个过程。将自动“从生产数据库转储数据”,然后“删除暂存数据库上的数据”,然后“将数据恢复到暂存数据库”。我只需要“删除暂存数据库上的数据”部分的帮助。
我在 PostgreSQL 9.5.2 上运行
a_h*_*ame 32
您不必删除数据库,这应该足以放下所有对象在数据库中。这可以使用
drop owned by adminuser
Run Code Online (Sandbox Code Playgroud)
如果再创建SQL转储,包括create table
报表(所以没有在--data-only
选项)一切都应该罚款。
你也可以去掉--column-inserts
的话,这将使进口一个很大更快。
但是,如果您确实想删除所有内容,则可以使用一点动态 SQL 来完成:
do
$$
declare
l_stmt text;
begin
select 'truncate ' || string_agg(format('%I.%I', schemaname, tablename), ',')
into l_stmt
from pg_tables
where schemaname in ('public');
execute l_stmt;
end;
$$
Run Code Online (Sandbox Code Playgroud)
这将public
使用单个语句截断模式中的所有表,即使有许多外键约束连接所有表,该语句也将起作用。如果您的表分布在多个架构上,则需要将它们添加到where
条件中。
pg_restore 有一个 --clean 标志(或者可能是 --create),它会在运行操作之前自动删除数据..
优秀的文档应该对你有很大帮助......
只是为了澄清,以防混淆:
在重新创建数据库对象之前清理(删除)它们。(除非使用 --if-exists,否则如果目标数据库中不存在任何对象,则这可能会生成一些无害的错误消息。)
这不会删除实际的数据库......只删除表/视图/等。
如果由于某种原因,删除和重新创建表是不可接受的,那么您将不得不做更多的工作来手动创建一个脚本,该脚本data only
从源数据库、问题TRUNCATE
或DELETE
目标数据库中创建转储,然后加载数据转储。据我所知,没有快速/巧妙的方法可以做到这一点。
归档时间: |
|
查看次数: |
80595 次 |
最近记录: |