我目前正在用PostgreSQLtry 继承系统,但我的子表中的自动增量索引有问题.

我有三张表:"货币"、"加密"和"稳定"

CREATE TABLE IF NOT EXISTS public.currency
(
    id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    name VARCHAR(30) UNIQUE NOT NULL,
    symbol VARCHAR(10) UNIQUE NOT NULL,
);

CREATE TABLE IF NOT EXISTS public.stable (id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY) INHERITS (public.currency);    
CREATE TABLE IF NOT EXISTS public.crypto (id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY) INHERITS (public.currency);

我这样插入了我的数据:

INSERT INTO public.stable (name, symbol) VALUES ('Euro', '€'), ('Dollar', '$'), ('Tether', 'USDT');    
INSERT INTO public.crypto (name, symbol) VALUES ('Bitcoin', 'BTC'), ('Ethereum', 'ETH'), ('Litcoin', 'LTC');

但这是我的问题:我希望有一个唯一的标识符,通过父表"Currency"自动递增.

enter image description here

但是,有没有可能换成这样(1,2,3,4,5,6):

enter image description here

我的主键有问题吗?

非常感谢.

推荐答案

我们可以try 使用create sequence来设置多个表之间共享的行号.

定义一个新的序列生成器

create sequence n_id;

然后我们可以使用下面的sequence,为这三张表共享这sequence.

create sequence n_id;

CREATE TABLE IF NOT EXISTS currency
(
    id INT default nextval('n_id') PRIMARY KEY,
    name VARCHAR(30) UNIQUE NOT NULL,
    symbol VARCHAR(10) UNIQUE NOT NULL
);

CREATE TABLE IF NOT EXISTS stable (id INT default nextval('n_id') PRIMARY KEY) INHERITS (currency);    
CREATE TABLE IF NOT EXISTS crypto (id INT default nextval('n_id') PRIMARY KEY) INHERITS (currency);

sqlfiddle

Postgresql相关问答推荐

ANTLR4 PostgreSQL语法被 destruct 了吗?

多克.波斯格雷斯.PgAdmin4

Prisma:获取连接的活动 Postgresql 模式的名称

如何创建一个触发器来传播对主键表的更新?

EF Core添加迁移目标postgreeSQL返回无法加载类型'Microsoft.EntityFrameworkCore.Storage.IRelationalValueBufferFactoryFactory

PostgreSQL - 列出模式中的所有唯一约束

Cloud SQL 时间点 数据驻留

Windows上的psql:错误:编码UTF8的字节序列无效:0xc8 0x20

是否可以使用 pgAdmin4 自动格式化/美化 SQL 查询?

如何在构建时链接 docker 容器?

如何在可选参数上查询 postgres?

断言错误:Django-rest-Framework

错误:CASE types character varying and numeric cannot be matched

Rails 4 迁移: has_and_belongs_to_many table name

从time without time zone和时区名称中获取time with time zone

Postgres 类似于 SQL Server 中的 CROSS APPLY

从长时间的postgres转换日期

PostgreSQL 无法启动:server.key具有组或世界访问权限

Postgres DB 上的整数超出范围

如何获取一个月的天数?