Postgres FK声明引用客户名称而不是类型?

时间:2014-07-14 16:59:13

标签: postgresql types foreign-keys pgadmin

我没有太多使用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相关的东西?

1 个答案:

答案 0 :(得分:2)

要确定,请运行:

SELECT *
FROM   pg_type
WHERE  typname = 't2_id'

如果typtyped,则为CREATE DOMAIN创建的域名。
或者在pgAdmin中,只需检查“对象浏览器”中的域列表。

是的,这与有点有关pgAdmin,因为它礼貌地显示了serial列。 serial不是实际类型,基础类型是integer。因此,您的域类型也必须基于integer以允许外键,这需要匹配的基本类型。详细信息:
Safely and cleanly rename tables that use serial primary key columns in Postgres?