我正在尝试编写一个pg_restore
命令来仅将某些表(及其数据)还原到我的数据库。
注意:描述的每个命令都以我删除并重新创建数据库开头,并以:-v -x -O -j 8 -h localhost -U username -d database file.dump
结束 (出于好奇,我不想使用--clean
,因为转储来自的数据库具有不同的名称。
由于pg_restore
对我来说效果很好(使用上面的参数),我查看了pg_restore
文档,并尝试了这样的事情:
pg_restore -t table1 -t table2 ...
(我以这种方式指定了 121 个表)。
但是,我收到如下错误:
pg_restore: creating TABLE people
pg_restore: [archiver (db)] Error from TOC entry 123; 1234 12345 TABLE people dumped_table_username
pg_restore: [archiver (db)] could not execute query: ERROR: type "hstore" does not exist
LINE 14: extra_data hstore,
^
Command was: CREATE TABLE people (
id integer NOT NULL,
name string,
age integer,
date_of_birt...
我不明白为什么只有在设置-t
标志时才会出现问题,但似乎是。
这是怎么回事?
编辑:看起来这是由于hstore而失败的表pg_restore的副本,这是最近被问到的,到目前为止还没有接受的答案。
显然,设置了 -t
/--table
标志的pg_restore
不会运行转储文件中CREATE EXTENSION
命令(因为它们在技术上不是该表的一部分)。我的问题通过在 pg_restore
命令之前手动运行 psql database -c "CREATE EXTENSION hstore;"
来解决。