Jak wiemy, nie jest to prosta droga do oddania żadnego rekordu do odpowiedniego typu złożonego w PostgreSQL, tak:PostgreSQL cast rekord kompozytowego typu
CREATE TYPE test.t_test AS (
mytext text,
myint integer
);
SELECT ('text', 10)::test.t_test; -- will succeed
Ale jedna niedogodność polega na tym, że - jeśli typ docelowy jest modyfikowany (na przykład pole jest dodana) - odlew następnie przełamać :(
ALTER TYPE test.t_test ADD ATTRIBUTE mychar char(1);
SELECT ('text', 10)::test.t_test; -- will fail
CREATE CAST
w tym przypadku może pomóc, ale nie mogą przejść pseudo typu jak RECORD
jako argumentu w funkcji odlewania. Ani typ-dziedziczenie, ani typ złożony Działają także wartości domyślne (takie jak tabela). Czy istnieje tutaj inny sposób uzyskania zgodności?
Oczywiście jest to możliwe, aby korzystać z jawnych lanego funkcje jak CREATE FUNCTION test.to_t_test(t text, i integer, c char DEFAULT '') RETURNS test.t_test
a następnie zrobić
SELECT test.to_t_test('text', 10) -- OK
SELECT test.to_t_test('text', 10, '1') -- OK
następnie użyć domyślnych wartości parametrów. Ale ta droga nie jest ani jasna, ani wygodna.