Postgresql: почему таблица \ d + не показывает значение по умолчанию как ноль - PullRequest
0 голосов
/ 09 октября 2018

Я новичок в Postgres из MySQL.

Я создал таблицу со столбцом 'col', значение которого по умолчанию равно нулю.

CREATE TABLE widgets (id serial primary key, col bigint default null);
CREATE TABLE
test=# \d+ widgets;
                                                Table "public.widgets"
 Column |  Type   | Collation | Nullable |               Default               | Storage | Stats target | Description 
--------+---------+-----------+----------+-------------------------------------+---------+--------------+-------------
 id     | integer |           | not null | nextval('widgets_id_seq'::regclass) | plain   |              | 
 col    | bigint  |           |          |                                     | plain   |              | 
Indexes:
    "widgets_pkey" PRIMARY KEY, btree (id)

test=# 

Однако вВ столбце по умолчанию нет ничего, что указывало бы на то, что это пустое поле.

Должно ли значение по умолчанию показывать как ноль в выходных данных схемы?

Я также пробовал тот же пример выше, но с default 99.При вводе \d+ в столбце По умолчанию ничего не отображается.В этом примере я вставляю строку, INSERT INTO widgets (id) VALUES (1);, она получает значение по умолчанию 99, поэтому я знаю, что используется значение по умолчанию (по крайней мере, для целочисленного значения).Обновление: столбец по умолчанию на самом деле показывает 99. Я использовал \ d + с автозаполнением и просмотрел неверную таблицу.

С default null, когда я SELECT * FROM widgets, столбец отображается пустым.

Разве Postgres явно не показывает значение, помеченное как 'null'?Если нет, то как можно различить пустое текстовое поле и поле с нулевым значением?

1 Ответ

0 голосов
/ 09 октября 2018

Если ничего не указано, по умолчанию для столбца используется null.Очевидно, разработчики psql считают, что показывать null в качестве значения по умолчанию не имеет смысла.Может быть, потому что это стандартное поведение или потому что null не является «значением».

В выводе \d отображаются только ненулевые значения по умолчанию.


как можно различить пустое текстовое поле и поле с нулевым значением?

пустая строка '' отличается от значения null, и вы увидите разницу в выводе:

postgres=# CREATE TABLE null_test (c1 text default null, c2 text default '');
CREATE TABLE
postgres=# \d null_test
            Table "public.null_test"
 Column | Type | Collation | Nullable | Default
--------+------+-----------+----------+----------
 c1     | text |           |          |
 c2     | text |           |          | ''::text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...