20

私はpostgreSQLを使用しています。次のような列があります。

NOT NULL

ただし、次のように空の文字列を含む行を挿入したい場合:

''

エラーは発生せず、受け入れます。挿入値を確認するにはどうすればよいnot emptyですか? (空でもヌルでもない)

PS:私の列は次のように定義されています:

"ads" character varying(60) NOT NULL
4

2 に答える 2

27

列定義に制約を追加します。たとえば、次のようなものです。

ads character varying(60) NOT NULL CHECK (ads <> '')

詳細については、http://www.postgresql.org/docs/current/static/ddl-constraints.htmlを参照してください。

于 2011-10-31T08:07:12.807 に答える
11

postgreSQLの現在のドキュメントにある次のようにして、目的を達成できます。

CREATE TABLE distributors (
    did    integer PRIMARY KEY DEFAULT nextval('serial'),
    name   varchar(40) NOT NULL CHECK (name <> '')
);

ドキュメントから:

CHECK ( expression )

CHECK 句は、挿入操作または更新操作が成功するために、新しい行または更新された行が満たさなければならないブール結果を生成する式を指定します。TRUE または UNKNOWN と評価される式は成功します。挿入または更新操作のいずれかの行が FALSE の結果を生成すると、エラー例外が発生し、挿入または更新はデータベースを変更しません。列制約として指定されたチェック制約は、その列の値のみを参照する必要がありますが、テーブル制約に表示される式は複数の列を参照できます。

現在、CHECK 式にサブクエリを含めることも、現在の行の列以外の変数を参照することもできません。

于 2011-10-31T08:08:32.157 に答える