在现有表上创建序列和链接期间,我在 Postgres 中遇到一个奇怪的错误。
我尝试在具有名为“testschema”的模式的现有数据库上执行以下脚本:
BEGIN TRANSACTION;
CREATE TABLE testschema.mytable (
id INTEGER,
value VARCHAR(30),
CONSTRAINT pk_mytable PRIMARY KEY (id));
CREATE SEQUENCE testschema.mytable_id_seq;
ALTER TABLE testschema.mytable ALTER COLUMN id SET NOT NULL;
ALTER TABLE testschema.mytable ALTER COLUMN id SET DEFAULT nextval('mytable_id_seq');
COMMIT;
第二个 ALTER TABLE 查询出现以下错误:
********** Erreur **********
ERREUR: la relation « mytable_id_seq » n'existe pas État SQL :42P01
错误信息可以翻译为“Relation 'mytable_id_seq' does not exist”。
如果我尝试在没有架构的情况下(即在公共(public)架构中)执行此脚本,它会起作用。
我不明白它失败了什么。有人知道问题出在哪里吗?
感谢您的帮助。
最佳答案
替换:
ALTER TABLE testschema.mytable ALTER COLUMN id SET DEFAULT nextval('mytable_id_seq');
通过
ALTER TABLE testschema.mytable ALTER COLUMN id SET DEFAULT nextval('testschema.mytable_id_seq');
默认情况下,不使用模式限定符的对象在 search_path
变量中的模式中搜索。默认情况下,此变量中仅存在 public
模式。
所以最简单的方法是在引用对象时使用完全限定的限定符。 或者,您可以将新架构放在路径中,如下所示:
SET search_path TO testschema,public;
关于postgresql - 在 Postgres 中的特定模式上创建序列时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26799971/