PostgreSQL 12 中是否可以自定义域数组?
Are custom domains arrays possible in PostgreSQL 12?
我已将自定义域 tmoney
声明为
create domain tmoney as decimal (13,4);
然后我在 table 声明中使用它的数组,
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}');
在 PostgreSQL 12 中没有解析异常,因为它似乎以前就存在过(参见 Create array of custom domain postgres),但是,每当我尝试检索作为 tmoney[] 插入的值时,就会发现 DBCException。请注意,smallint[].
不会出现此错误
select * from test;
id|volume |price |
--|-----------------|---------------------------------------------|
1|{1,10,50,100,250}|DBCException: Can't resolve data type _tmoney|
https://www.postgresql.org/docs/current/sql-createdomain.html 处的文档仅指定
tdata_type – The underlying data type of the domain. This can include array specifiers.
这与创建的域一致
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}|
但是,由于 PostgreSQL 12 解析器不会阻止在 table 声明中使用 tmoney[5]
,我想知道是否有不同的语法允许我使用自定义的第一个版本域名。
使用域数组是 introduced in v11。
您的 SQL 语句与 psql
一起工作得很好。
您一定是在使用其他可能无法正确支持该功能的客户端。
考虑提交有关该软件的错误报告或增强请求。
我已将自定义域 tmoney
声明为
create domain tmoney as decimal (13,4);
然后我在 table 声明中使用它的数组,
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}');
在 PostgreSQL 12 中没有解析异常,因为它似乎以前就存在过(参见 Create array of custom domain postgres),但是,每当我尝试检索作为 tmoney[] 插入的值时,就会发现 DBCException。请注意,smallint[].
不会出现此错误select * from test;
id|volume |price |
--|-----------------|---------------------------------------------|
1|{1,10,50,100,250}|DBCException: Can't resolve data type _tmoney|
https://www.postgresql.org/docs/current/sql-createdomain.html 处的文档仅指定
tdata_type – The underlying data type of the domain. This can include array specifiers.
这与创建的域一致
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}|
但是,由于 PostgreSQL 12 解析器不会阻止在 table 声明中使用 tmoney[5]
,我想知道是否有不同的语法允许我使用自定义的第一个版本域名。
使用域数组是 introduced in v11。
您的 SQL 语句与 psql
一起工作得很好。
您一定是在使用其他可能无法正确支持该功能的客户端。 考虑提交有关该软件的错误报告或增强请求。