Как обрабатывается нулевое значение / массив в postgres? - PullRequest
0 голосов
/ 15 января 2020

Допустим, у меня есть следующее поле и значения:

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

Сохранит ли postgres все эти значения как есть. Или какое-либо из этих значений будет недействительным или преобразовано во что-то другое - например, если null в качестве значения поля (это значение преобразуется в [])?

Ответы [ 2 ]

2 голосов
/ 16 января 2020

В 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
array_field  | array_length
:----------- | -----------:
{1,2,3}      |            3
{3,4,5}      |            3
{NULL,2,3,4} |            4
<em>null</em>         |         <em>null</em>
{}           |         <em>null</em>
0 голосов
/ 16 января 2020

PostgreSQL не будет молча изменять ваши массивы. Если вы сохранили [NULL], он не станет []. Ваш последний пример ([NULL,]) синтаксически неверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...