sql >> データベース >  >> RDS >> PostgreSQL

PostgresqlCHECKINリスト制約のカスタムエラーメッセージ

    わずかに異なるチェック制約を使用できる場合は、次の操作を実行できます。

    値をチェックする関数を作成します:

    create function check_zone(p_input text)
      returns boolean
    as
    $$
    declare
      l_allowed text[] := array['Marine', 'Terrestrial'];
    begin
      if p_input = any(l_allowed) then 
        return true;
      end if;
      raise 'The only allowed values are: %', array_to_string(l_allowed, ', ');
    end;
    $$
    language plpgsql
    immutable;
    

    そして、IN条件の代わりにその関数を使用します:

    create table data
    (
      management_zone text not null,
      CONSTRAINT check_zone CHECK (check_zone(management_zone))
    );
    

    次のINSERT

    insert into data values ('foo');
    

    結果は次のようになります:




    1. 更新せずに、ONCONFLICTを使用してINSERTから行を返します

    2. UNION、EXCEPT、またはINTERSECTを使用している場合、PostgreSQLの「エラー:列「colname」が存在しません」を修正しました

    3. SQLGROUPBY-プロのように結果をグループ化するための3つの簡単なヒント

    4. SQL UNION FOR XML 名の出力列