(Используя приведенный ниже пример кода ...) Я был озадачен, чтобы выполнить некоторые (повторно исполняемые) сценарии (сохранение/управление db-логикой в репозитории исходного кода), заявив, что четко определенная столбец foo.foo_b
не существовал, хотя он был успешно выполнен в сценариях.Каскад каскада композитного типа Postgres удаляет только зависимые столбцы
Код испытания, которые показывают это:
-- foo.sql type script
drop type if exists foo cascade ;
create type foo as (
--foo_b bar, -- (a) not there in first script version
foo_c char
) ;
-- bar.sql type script
drop type if exists bar cascade ;
create type bar as (
bar_i int
) ;
-- simple sample code that may cause the strange error
select (null::foo).* ;
--select (null::foo).foo_b ; -- (a) not there in first script version
выполнение сценария с (a)
outcommented (как есть):
(0 rows affected)
(0 rows affected)
(0 rows affected)
(0 rows affected)
foo_c
-----
-
(0 rows affected)
выполнение сценария с нашей новой foo_b
колонки используется (удалено комментарий --
префикса от вышеуказанных 2 (a)
):
(0 rows affected)
(0 rows affected)
(0 rows affected)
(0 rows affected)
foo_c
-----
-
(0 rows affected)
ERROR: column "foo_b" not found in data type foo
Position: 9
Мой оригинальный SQL отличается и на самом деле вызвало еще одну ошибку по той же причине:
select row(null::bar, 'xxx')
ERROR: cannot cast type record to foo
Detail: Input has too many columns.
Position: 7818
то же относится к таблицам, если 'bar' является' table' (или неявно созданным типом) –