【问题标题】:Can't create tables with sequences in a non-default schema无法在非默认架构中创建具有序列的表
【发布时间】:2017-04-10 00:36:05
【问题描述】:

我正在尝试创建一个系统,我想在其中对数据进行多年排序(使用模式),例如,现在我有一个名为 datos_2016 的模式,然后我创建了一个名为 seq_datos 的序列。

当我尝试创建表datos 并为cdata 设置序列时,它说

“发生错误:错误关系“seq_data”不存在”

但如果我创建“公共”模式,然后在那里创建序列,则不会发生错误(表已成功创建)。

为什么我不能在另一个架构中创建序列?

SQL 代码:

CREATE TABLE datos_2016.data
(
   cdata integer NOT NULL DEFAULT nextval('seq_data'), 
   CONSTRAINT fk_cdata PRIMARY KEY (cdata) USING INDEX TABLESPACE sistema_index
) 
WITH (
  OIDS = FALSE
)

TABLESPACE sistema_data;

序列码:

CREATE SEQUENCE datos_2016.seq_data
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE datos_2016.seq_data
  OWNER TO postgres;
GRANT ALL ON SEQUENCE datos_2016.seq_data TO public;
GRANT ALL ON SEQUENCE datos_2016.seq_data TO postgres;

【问题讨论】:

    标签: postgresql schema sequence


    【解决方案1】:

    您需要完全限定序列名称:

    CREATE TABLE datos_2016.data
    (
       cdata integer NOT NULL DEFAULT nextval('datos_2016.seq_data'), 
       ....
    );
    

    【讨论】:

    • 太好了,就是这样!我假设没有创建“公共”架构不必指定架构
    【解决方案2】:

    试试这个 nextval('datos_2016."seq_data"')

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      相关资源
      最近更新 更多