我希望能够将一个特定的数据库以另一个名称还原到另一个服务器上。到目前为止,一切都很好。
我使用了以下命令:
pg_dump -U postgres -F c -O -b -f maindb.dump maindb
在生产服务器上转储主数据库。我使用以下命令:
pg_restore --verbose -O -l -d restoredb maindb.dump
在我们的测试服务器上将数据库恢复到另一个数据库。它基本上恢复正常,但有一些错误,例如:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 3595; 1259 213452 INDEX idx_clientnomclient maindbuser
pg_restore: [archiver (db)] could not execute query: ERROR: function unaccent(text) does not exist
LINE 1: SELECT unaccent(lower($1));
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
QUERY: SELECT unaccent(lower($1));
CONTEXT: SQL function "cyunaccent" during inlining
Command was: CREATE INDEX idx_clientnomclient ON client USING btree (public.cyunaccent((lower((nomclient)::text))::character varying));
cyunaccent是公共模式中的一个函数,它会随着恢复而创建。
在恢复完成后,我可以使用相同的SQL完美地重新创建这些索引,没有任何错误。
我还尝试使用pg_restore的-i选项以执行单个事务进行恢复,但这并没有起到作用。
我做错了什么?