#sql #postgresql #notnull
#sql #postgresql #notnull
Вопрос:
Я использую PostgreSQL. У меня есть столбец, который:
NOT NULL
Однако, когда я хочу вставить строку с пустой строкой, например:
''
он не выдает мне ошибку и принимает. Как я могу проверить, должно ли значение вставки быть not empty
? (Ни пустой, ни нулевой)
PS: мой столбец определен как:
"ads" character varying(60) NOT NULL
Ответ №1:
Добавьте ограничение к определению столбца. Например, что-то вроде:
ads character varying(60) NOT NULL CHECK (ads <> '')
Подробнее см. http://www.postgresql.org/docs/current/static/ddl-constraints.html
Комментарии:
1. Почему вы ссылаетесь на старую версию 8.3? Смотрите здесь для получения дополнительной информации: meta.stackexchange.com/questions/108714 /…
2. Вы также можете добавить домен, если используете это чаще: postgresql.org/docs/current/static/sql-createdomain.html
Ответ №2:
Найденный в текущей документации PostgreSQL, вы можете сделать следующее, чтобы достичь желаемого:
CREATE TABLE distributors (
did integer PRIMARY KEY DEFAULT nextval('serial'),
name varchar(40) NOT NULL CHECK (name <> '')
);
Из документации:
CHECK ( expression )
Предложение CHECK указывает выражение, выдающее логический результат, которому должны удовлетворять новые или обновленные строки для успешной операции вставки или обновления. Выражения, оценивающие значение TRUE или UNKNOWN, завершаются успешно. Если какая-либо строка операции вставки или обновления выдает ЛОЖНЫЙ результат, возникает исключение ошибки, и вставка или обновление не изменяют базу данных. Ограничение проверки, указанное в качестве ограничения столбца, должно ссылаться только на значение этого столбца, в то время как выражение, появляющееся в ограничении таблицы, может ссылаться на несколько столбцов.
В настоящее время выражения ПРОВЕРКИ не могут содержать подзапросы или ссылаться на переменные, отличные от столбцов текущей строки.
Комментарии:
1. PostgreSQL 8.2? Версия 8.2 была выпущена в 2006 году (!), Срок ее службы истекает в этом году . Пожалуйста, обратитесь
/current
, если вам не нужно обращаться к старой версии. Больше информации здесь: meta.stackexchange.com/questions/108714 /…