如何检查TYPE ATTRIBUTE是否已存在

时间:2018-10-15 10:45:21

标签: sql postgresql types attributes plpgsql

我正在尝试向pg_type添加新属性,我需要检查是否已经存在名为“ parentvehicleid”的属性。

如果我要向表中添加一列,则可以像示例中那样检查column_name:

branch-1

我可以检查属性是否已经在类型中?

IF NOT EXISTS(SELECT 1 FROM information_schema.columns WHERE table_name = 'tvms_routes' AND column_name = 'parentdriverid') THEN                                                    
  ALTER TABLE tvms_routes ADD COLUMN parentdriverid integer;    
END IF;                 

我不能删除类型,对象取决于它。表column_name to types属性的等效项是什么?

1 个答案:

答案 0 :(得分:0)

复合类型具有其对应的表(可能是虚拟的)。您可以在pg_class中找到它的条目,并在pg_attribute:

中找到它的属性列表。
IF NOT EXISTS (
    SELECT 1
    FROM pg_type t
    JOIN pg_class c ON c.oid = t.typrelid
    JOIN pg_attribute a ON a.attrelid = c.oid
    WHERE t.typname = 'tvms_dseoptitree_routes_type' 
    AND a.attname = 'parentvehicleid'
    )
THEN
    ALTER TYPE tvms_dseoptitree_routes_type ADD ATTRIBUTE parentvehicleid integer;
END IF;