先来看一张图
简单说明一下里面的指令:
先建立一个 table 名称鲑鱼寿司,里面有两个栏位,苹果跟草莓,型态是 int 及 text.建立 type 辣椒 , 里面的栏位是小螃蟹,根据 鲑鱼寿司table,所以小螃蟹是複合资料型态,里面就包含了苹果跟草莓.再来利用 type 辣椒 来建立 typed table 芒果.接着就是输入资料,这时候需要使用转型的技巧,PG可以使用 :: 运算符号,与CAST()等效.接着是取出资料,因为是複合资料型态,所以需要用()包住小螃蟹.看到这里,也许会有疑问.这种 typed table 有何用处?
先来看
当我们要对辣椒增加属性时,因为有 typed table 的关係,是不能这样修改,要用 CASCADE.
有点类似关联限制.
接着我们使用辣椒再建立一个table 西瓜.
然后再增加辣椒的属性.
后面再做查询,可以看到table的栏位是 小螃蟹 与 奇异果.
这样的关係限制,有利于我们在系统中,保持栏位的一致性.就不会改了芒果忘了西瓜.
在PG的information_schema.tables 里面也有 is_typed 属性.
可以很方便的查到,哪些table 是 typed table.
线上展示在以下连结:
https://dbfiddle.uk/?rdbms=postgres_14&fiddle=dbc11dbbebce4e65f02dd32ace903da9
编辑时预览,可以看到 辣椒 那些 emoji.但是发表时,却又变成?了,所以改成截图方式.