通过在PostgreSQL中获取Sequence的NextVal插入表中

时间:2016-07-15 06:51:11

标签: mysql postgresql

我有一个名为SEQ_TABLE的表,它有两列,SEQ_NAME和ID

SEQ_NAME        |  ID
----------------------
SEQ_TABLE_10    |   1
SEQ_TABLE_20    |   5

其中ID是TABLE_10和TABLE_20

的COLUMN_1的最大值

现在,我必须通过从 SEQ_TABLE 获取序列的 nextvalue ,将新记录插入TABLE_10。

我写了PostgreSQL查询如下:

INSERT INTO TABLE_10 (COLUMN_1, COLUMN_2, COLUMN_3) VALUES  ((SELECT nextval(SEQ_TABLE)),   'Bangalore' ,NULL);

当我执行上面的Query时,它给出了以下错误: **********错误**********

ERROR: column "SEQ_TABLE_10" does not exist
SQL state: 42703
Character: 99

但是,以下查询在 MySQL 数据库中正常工作:

INSERT INTO TABLE_TABLE(COLUMN_1, COLUMN_2, COLUMN_3) VALUES  ((SELECT nextval('TABLE_172_SEQ','true')),    'Bangalore' ,NULL);

PostgreSQL 数据库中实现它的Exact Postgres查询是什么?

2 个答案:

答案 0 :(得分:0)

您想创建一个序列,而不是一个表(SEQ_TABLE) 请参考此链接 https://www.postgresql.org/docs/8.1/static/sql-createsequence.html

例如

class ProductA {
    constructor(options) {
        Object.assign(this, {
            weight: 5,
            height: 10,
            price: 7
        }, options);
    }
}

class ProductB extends ProductA {
    constructor(options){
        super(Object.assign({
            height: 12
        }, options));
    }
}

答案 1 :(得分:0)

在PostgreSQL中你会使用

CREATE TABLE table_10 (id serial PRIMARY KEY, other text NOT NULL);

然后id的类型为integer,创建了一个序列table_10_id_seq,并将nextval调用添加到DEFAULT的{​​{1}}子句中列。

您可以使用id中的\d进行检查:

psql

此外,该列属于该表,并且在删除表时将自动删除。

您插入省略\d table_10 Table "laurenz.table_10" Column | Type | Modifiers --------+---------+------------------------------------------------------- id | integer | not null default nextval('table_10_id_seq'::regclass) other | text | not null Indexes: "table_10_pkey" PRIMARY KEY, btree (id) 列的行,如下所示:

id

然后将使用INSERT INTO table_10 (other) VALUES ('something'); 值。

如果你想“徒步”做同样的事情,例如为序列使用不同的名字或不同的起始值,那将是这样的:

DEFAULT