【问题标题】:Error during creation of sequence on specific schema in Postgres在 Postgres 中的特定模式上创建序列时出错
【发布时间】:2015-01-04 04:04:20
【问题描述】:

在创建序列和链接现有表的过程中,我在 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: la 关系 « mytable_id_seq » n'existe pas 执行 SQL :42P01

错误消息可以翻译为“关系'mytable_id_seq'不存在”。

如果我尝试在没有架构的情况下执行此脚本(即在公共架构中),它会起作用。

我不明白它失败了。有谁知道问题出在哪里?

感谢您的帮助。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    替换:

    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;
    

    Source

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      相关资源
      最近更新 更多