我没有太多使用Postgres(我曾经使用其他数据库)所以最近我在pgAdmin中查看了一个数据库并看到了一个奇怪的模式语法,我无法在其中找到任何内容。文档,想要了解一下:
所以我看到了这种语法:
CREATE TABLE table1
(
table1_id serial NOT NULL,
table2_fk_id t2_id NOT NULL, -- what is this line?
...
CONSTRAINT fk_table2_chm FOREIGN KEY (table2_fk_id)
REFERENCES table2 (t2_id_col) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
);
上面的标记是什么?它似乎是外键col而不是指定int / int8它指定了自定义名称t2_id
?
在上面引用的table2
pk列中,serial
类型为t2_id_col
,并标有{{1}}。
这是一些奇特的语法吗?或者与pgAdmin相关的东西?
答案 0 :(得分:2)
要确定,请运行:
SELECT *
FROM pg_type
WHERE typname = 't2_id'
如果typtype
为d
,则为CREATE DOMAIN
创建的域名。
或者在pgAdmin中,只需检查“对象浏览器”中的域列表。
是的,这与有点有关pgAdmin,因为它礼貌地显示了serial
列。 serial
不是实际类型,基础类型是integer
。因此,您的域类型也必须基于integer
以允许外键,这需要匹配的基本类型。详细信息:
Safely and cleanly rename tables that use serial primary key columns in Postgres?