gpt4 book ai didi

database - 还原 Postgres 数据库时出现不重音问题

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:36 29 4
gpt4 key购买 nike

我也想将另一个数据库名称下的特定数据库还原到另一台服务器。到目前为止,还不错。

我使用了这个命令:

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 是公共(public) shcema 中的一个函数,它确实是在恢复时创建的。

恢复后,我能够使用相同的 sql 完美地重新创建这些索引,没有任何错误。

我也曾尝试使用 pg_restore 的 -i 选项来恢复以执行单个事务,但它没有帮助。

我做错了什么?

最佳答案

我刚刚发现了问题,并且能够将其缩小为一个简单的测试用例。

CREATE SCHEMA intranet;
CREATE EXTENSION IF NOT EXISTS unaccent WITH SCHEMA public;
SET search_path = public, pg_catalog;
CREATE FUNCTION cyunaccent(character varying) RETURNS character varying
LANGUAGE sql IMMUTABLE
AS $_$ SELECT unaccent(lower($1)); $_$;
SET search_path = intranet, pg_catalog;
CREATE TABLE intranet.client (
codeclient character varying(10) NOT NULL,
noclient character varying(7),
nomclient character varying(200) COLLATE pg_catalog."fr_CA"
);
ALTER TABLE ONLY client ADD CONSTRAINT client_pkey PRIMARY KEY (codeclient);
CREATE INDEX idx_clientnomclient ON client USING btree (public.cyunaccent((lower((nomclient)::text))::character varying));

此测试用例来自以纯文本形式完成的 pg_dump。

如您所见,cyunaccent 函数是在公共(public) shcema 中创建的,因为它稍后会被其他模式中的其他表使用。

psql/pg_restore 不会重新创建索引,因为它找不到函数,尽管指定了 shcema 名称来引用它。问题出在

SET search_path = intranet, pg_catalog;

打电话。将其更改为

SET search_path = intranet, public, pg_catalog;

解决问题。我已经向 postgres 提交了关于此的错误报告,但尚未在队列中。

关于database - 还原 Postgres 数据库时出现不重音问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939584/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com