PG_Restore干净的表PSQL



我正在尝试还原我将其倒入当前位置的桌子。该表是使用以下方式倾倒的:

pg_dump -t table db > table.sql -U username

尝试还原,我正在使用:

pg_restore -c --dbname=db --table=table table.sql

我正在使用-c,因为该表当前存在并且具有数据,但是它返回:

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

我也尝试了:

-bash-4.2$ psql -U username -d db -1 -f table.sql

,由于数据已经存在,并且此PSQL命令没有--clean选项(我相信),它返回:

psql:table.sql:32: ERROR:  relation "table" already exists

是否有一种方法可以正确使用PG_Restore或将PSQL与 - 清洁选项使用?

朋友,朋友。您不能从计划文本转储中 pg_restore。在文档中:

" pg_restore是从pg_dump以一种非平面文本格式创建的档案中恢复PostgreSQL数据库的实用程序。"https://www.postgresql.org/docs/9.6/static/app-pgrestore.html

如果您可以重新执行pg_dump,则可以使用-Fc标志进行操作,该标志将产生一个可以使用pg_restore还原的工件。如果您以普通文本格式陷入table.sql,则确实有一些选择(我在下面的两个示例中调用您的目标表my_fancy_table):

选项1:

丢下表:drop table my_fancy_table;

现在运行您的PSQL命令:psql <options> -f table.sql

如果您具有其他表需要行的参考完整性,则可能无法丢下表。

选项2:从温度表

upsert

您可以编辑SQL文件(因为它是纯文本),然后将表名称更改为my_fancy_table_temp(或任何尚不存在的表名称)。现在,您将拥有两个表格,一个来自SQL文件的温度,以及一直存在的真实表。然后,您可以编写一些UpSert SQL,以插入或更新来自温度表的行的真实表:

insert into my_facy_table (column1, column2)
select column1, column2 from my_fancy_table_temp
on conflict (my_fancy_unique_index)
update my_fancy_table
set column1 = excluded.column1,
 column2 = excluded.column2

相关内容

  • 没有找到相关文章

最新更新