NOT NULL制約は、列がNULL値をとらないことを指定する。
https://www.postgresql.jp/document/7.3/user/ddl-constraints.html
postgresdb1=# CREATE TABLE users ( id INT, name VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL ); CREATE TABLE postgresdb1=# INSERT INTO users (id, name, email) VALUES (1, 'Alice', 'alice@example.com'); INSERT 0 1 postgresdb1=# SELECT * FROM users; id | name | email ----+-------+------------------- 1 | Alice | alice@example.com (1 行) postgresdb1=# INSERT INTO users (id, name) VALUES (2, 'Bob'); ERROR: リレーション"users"の列"email"のNULL値が非NULL制約に違反しています DETAIL: 失敗した行は(2, Bob, null)を含みます postgresdb1=# SELECT * FROM users; id | name | email ----+-------+------------------- 1 | Alice | alice@example.com (1 行) postgresdb1=# INSERT INTO users (id, name, email) VALUES (2, NULL, 'bob@example.com'); ERROR: リレーション"users"の列"name"のNULL値が非NULL制約に違反しています DETAIL: 失敗した行は(2, null, bob@example.com)を含みます postgresdb1=# SELECT * FROM users; id | name | email ----+-------+------------------- 1 | Alice | alice@example.com (1 行) postgresdb1=#
NOT NULLの付いた列は、挿入時にNULLを指定出来ないし、省略も出来ない。