Как проверить, существует ли TYPE ATTRIBUTE - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь добавить новый атрибут в свой pg_type, и мне нужно проверить, существует ли уже тип с атрибутом с именем parentvehicleid.

Если я добавляю столбец в таблицу, я могупроверьте имя столбца, как в примере:

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;                 

И можно ли проверить, если атрибут уже в типе?

IF NOT EXISTS(SELECT 1 FROM pg_type WHERE typname = 'tvms_dseoptitree_routes_type' AND *WHAT GOES HERE??* = 'parentvehicleid') THEN                                                     
  ALTER TYPE public.tvms_dseoptitree_routes_type ADD ATTRIBUTE parentvehicleid integer;     
END IF;     

Я не могу удалить тип, объекты зависят от него.Что эквивалентно столбцу table_name для атрибута types?

1 Ответ

0 голосов
/ 15 октября 2018

Составной тип имеет соответствующую таблицу (может быть виртуальную).Вы можете найти его запись в 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;
...