如何在 Postgres-XL 中将 SEQUENCE 设置为 DEFAULT?

Posted

技术标签:

【中文标题】如何在 Postgres-XL 中将 SEQUENCE 设置为 DEFAULT?【英文标题】:How to set SEQUENCE as DEFAULT in Postgres-XL? 【发布时间】:2018-12-18 12:10:49 【问题描述】:

我使用 Postgres-XL 10R1。 我创建了表packs 和序列packs_id_seq 相同的SQL:

CREATE TABLE packs (
    id integer NOT NULL,
    name varchar(10) NOT NULL
) DISTRIBUTE BY REPLICATION;

CREATE SEQUENCE packs_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

我尝试使用 packs_id_seq 作为 id 列的默认值。

ALTER TABLE packs ALTER COLUMN id SET DEFAULT (nextval('packs_id_seq'));

但是有一些问题

INSERT INTO packs (name) VALUES ('test');
INSERT 0 0

为什么没有插入行?

所以,我更改了DISTRIBUTE 的子句。

ALTER TABLE packs DISTRIBUTE BY ROUNDROBIN;
ALTER TABLE packs DISTRIBUTE BY MODULO(id);
ALTER TABLE packs DISTRIBUTE BY HASH(id);

但又遇到同样的问题。

有什么想法吗? 谢谢。

【问题讨论】:

【参考方案1】:

你可以在这里使用“串行”数据类型,所以你的创建表会像

CREATE TABLE packs (
    id serial NOT NULL,
    name varchar(10) NOT NULL
) DISTRIBUTE BY REPLICATION;

现在插入记录时,

INSERT INTO packs (name) VALUES ('test');

会有类似的记录

id | name 
1  | test

【讨论】:

以上是关于如何在 Postgres-XL 中将 SEQUENCE 设置为 DEFAULT?的主要内容,如果未能解决你的问题,请参考以下文章

Postgres-XL 备用服务器

Postgres-XL 负载均衡

Postgres-XL 数据库

Postgres-xl 上的 PostGIS 扩展

初始化集群 Postgres-XL

Postgres-XL9.5r1.6 搭建