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

PostgreSQLのデフォルトの制約名は何ですか?

    問題:

    PostgreSQLのテーブルの制約のデフォルト名を知りたい。

    例:

    データベースに、country およびstudent 、次の制約があります:PRIMARY KEY (列id テーブル内country およびstudent )、FOREIGN KEY (列country_id テーブル内student )、DEFAULT (列name テーブル内student )、UNIQUE (列name テーブル内country および列personal_number テーブル内student )、およびCHECK (列age テーブル内student

    解決策:

    CREATE TABLE country (
    id int NOT NULL primary key,
    name varchar(100) UNIQUE
    );
    
    CREATE TABLE student (
    id int NOT NULL primary key,
    name varchar(100) NOT NULL DEFAULT 'unknown',
    personal_number varchar(100) UNIQUE,
    age int CHECK(age>15),
    country_id int,
    FOREIGN KEY(country_id) references country(id)
    );
    

    PostgreSQLがデフォルトでこれらのテーブルの制約にどのように名前を付けるかを表示してみましょう。このクエリを使用してそれらを確認します:

    SELECT conname, contype
    FROM pg_catalog.pg_constraint;
    

    結果は次のとおりです。

    conname contype
    country_pkey p
    country_name_key u
    student_age_check c
    student_pkey p
    student_personal_number_key u
    student_country_id_fkey f

    ディスカッション:

    テーブルを作成するときに、いくつかの列に制約を設定します。ただし、これらの制約の名前は指定していないため、PostgreSQLではデフォルトで名前が付けられています。制約のデフォルト名はどのように生成されますか?

    PostgreSQLでは、デフォルトの制約タイプはpです。 、fu 、およびc

    PRIMARY KEY デフォルトでは、テーブル名にアンダースコア(‘_)が付けられます。 ’)、および‘ pkey ’。上記の結果表では、2つのPRIMARY KEYを確認できます。 名前(「p」と入力します ’)– country_pkeyという名前の1つ country テーブルとstudent_pkeyという名前の別のテーブル student テーブル。

    FOREIGN KEY 制約タイプ「f」で示されます ’。その名前は、現在のテーブルの名前であるアンダースコア(‘_)によって生成されます。 ’)、列名、別のアンダースコア(‘ _ ’)、および‘ fkey ’。この例では、外部キー制約の名前はstudent_country_id_fkeyです。 、列country_idのため テーブル内student は外部キーです。

    CHECKのデフォルト名 制約は外部キーの制約と似ていますが、制約タイプが「c」である点が異なります。 ’。この例では、列age テーブル内student この制約があるため、デフォルトの制約名はstudent_age_checkです。 。

    UNIQUEのデフォルト名 制約(タイプ‘u ’)はテーブル名、アンダースコア(‘ _ ’)、列名、別のアンダースコア(‘ _ ’)、および‘ key ’。この例では、テーブルstudent UNIQUEがあります student_personal_number_keyという名前の制約 。制約内の複数の列の場合、名前は同様の規則に従いますが、制約の定義にすべての列の名前が含まれます。


    1. ユーザーストアドプロシージャの命名を避けるSP%またはSP_%

    2. unaccentを使用してNpgsqlとEntityFrameworkでPostgreSQLをクエリする

    3. SQLでグループ合計で行を並べ替える方法

    4. novalidateオプションで検証できません