Sono possibili array di domini personalizzati in PostgreSQL 12?

Aug 26 2020

Ho dichiarato un dominio personalizzato tmoneycome

create domain tmoney as decimal (13,4);

Quindi ne uso un array in una dichiarazione di tabella,

create table test (
  id        int generated by default as identity primary key,
  volume    smallint[5] not null default '{0, 0, 0, 0, 0}',
  price     tmoney[5]   not null default '{0, 0, 0, 0, 0}'
);

insert into test(volume, price) 
values ('{1, 10, 50, 100, 250}', '{10, 9.75, 9.5, 9, 8.75}');

In PostgreSQL 12 non ci sono eccezioni di parsing, poiché sembra che esistessero prima (vedi Creare un array di postgres di dominio personalizzato ), tuttavia, viene trovata una DBCException ogni volta che provo a recuperare i valori inseriti come tmoney []. Notare che questo errore non si verifica con smallint [].

select * from test;

id|volume           |price                                        |
--|-----------------|---------------------------------------------|
 1|{1,10,50,100,250}|DBCException: Can't resolve data type _tmoney|

La documentazione su https://www.postgresql.org/docs/current/sql-createdomain.html specifica solo quello

tdata_type - Il tipo di dati sottostante del dominio. Questo può includere specificatori di array.

Ciò è coerente con un dominio creato come

create domain tmoney as decimal (13,4)[];

create table test (
  id        int generated by default as identity primary key,
  volume    smallint[5] not null default '{0, 0, 0, 0, 0}',
  price     tmoney  not null default '{0, 0, 0, 0, 0}'
);

insert into test(volume, price) 
values ('{1, 10, 50, 100, 250}', '{10, 9.75, 9.5, 9, 8.75}');

select * from test;

id|volume           |price                   |
--|-----------------|------------------------|
 1|{1,10,50,100,250}|{10.0,9.75,9.5,9.0,8.75}|

Tuttavia, poiché il parser PostgreSQL 12 non impedisce l'utilizzo tmoney[5]in una dichiarazione di tabella, mi chiedo se esiste una sintassi diversa che mi consente di utilizzare questa prima versione del dominio personalizzato.

Risposte

2 LaurenzAlbe Aug 26 2020 at 19:37

L'utilizzo di array di domini è stato introdotto nella v11 .

Le tue istruzioni SQL funzionano perfettamente con psql.

Devi utilizzare un client diverso che probabilmente non lo supporta correttamente. Considera l'idea di inviare una segnalazione di bug o una richiesta di miglioramento con quel software.