0

假设我有以下字段和值:

ArrayField
[1,2,3]
[3,4,5]
[null,2,3,4]
null
[]
[null]

postgres 会按原样保存所有这些值。或者这些值中的任何一个是否无效或转换为其他值 - 例如null作为字段值(是否转换为[])?

4

2 回答 2

2

在 Postgres 中,所有表达式都是有效的,除了最后一个: '{null,}',这会引发错误:

格式错误的数组文字:“{null,}”

还值得注意的是null(和未定义的值)和{}(空数组)之间存在差异。假设您要写入具有not null约束的列,null会失败而{}被允许。

DB Fiddle 上的演示

-- create the table
create table t (array_field int[])

-- insert values
insert into t values
    ('{1,2,3}'),
    ('{3,4,5}'),
    ('{null,2,3,4}'),
    (null),
    ('{}')
;
-- 5 rows affected

-- won't work
insert into t values ('{null,}');
-- ERROR:  malformed array literal: "{null,}"
-- LINE 1: insert into t values ('{null,}')
--                               ^
-- DETAIL:  Unexpected "}" character.

-- check the results
select array_field, array_length(array_field, 1) from t
数组字段 | 数组长度
:----------- | ------------:
{1,2,3} | 3
{3,4,5} | 3
{NULL,2,3,4} | 4
         |         
{} |         空值
于 2020-01-15T21:04:21.783 回答
0

PostgreSQL 不会默默地修改你的数组。如果你存储[NULL]了,它就不会变成[]. 您的最后一个示例 ( [NULL,]) 在语法上不正确。

于 2020-01-15T21:03:04.577 回答