Come sappiamo, c'è un modo semplice per lanciare qualsiasi record di tipo composito corrispondente PostgreSQL, in questo modo:PostgreSQL getto record tipo composito
CREATE TYPE test.t_test AS (
mytext text,
myint integer
);
SELECT ('text', 10)::test.t_test; -- will succeed
Ma un inconveniente con questo è che - se il tipo di destinazione viene modificato (si aggiunge ad esempio un campo) - il cast sarà poi pausa :(
ALTER TYPE test.t_test ADD ATTRIBUTE mychar char(1);
SELECT ('text', 10)::test.t_test; -- will fail
CREATE CAST
per questo caso può aiutare ma non può passare una pseudo-tipo come RECORD
come argomento di una funzione di casting. E né l'ereditarietà del tipo né il tipo composito anche i valori predefiniti (come la tabella) funzionano. C'è un altro modo per ottenere la compatibilità qui?
Naturalmente è possibile utilizzare del cast-funzioni esplicite come CREATE FUNCTION test.to_t_test(t text, i integer, c char DEFAULT '') RETURNS test.t_test
e poi fare
SELECT test.to_t_test('text', 10) -- OK
SELECT test.to_t_test('text', 10, '1') -- OK
quindi utilizzare i valori dei parametri predefiniti. Ma in questo modo non è né chiaro né confortevole.