Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PostgreSQL: default constraint names

When creating a table in PostgreSQL, default constraint names will assigned if not provided:

CREATE TABLE example (     a integer,     b integer,     UNIQUE (a, b) ); 

But using ALTER TABLE to add a constraint it seems a name is mandatory:

ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b); 

This has caused some naming inconsistencies on projects I've worked on, and prompts the following questions:

  1. Is there a simple way to add a constraint to an extant table with the name it would have received if added during table creation?

  2. If not, should default names be avoided altogether to prevent inconsistencies?

like image 804
Ian Mackinnon Avatar asked Nov 05 '10 16:11

Ian Mackinnon


People also ask

How do you name a unique constraint?

Unique Key Constraint It is like Primary key but it can accept only one null value. The naming conventions for unique key constraints should have a "UQ_" prefix, followed by the table name, followed by the column name.

How do I view constraints in PostgreSQL?

Constraints of the table can be retrieved from catalog-pg-constraint. using the SELECT query. Just a detail: If you don't have tables with the same name in multiple schemas, in PSQL just \d+ {TABLE_NAME} works too.

How do I change unique constraints in PostgreSQL?

The syntax for creating a unique constraint using an ALTER TABLE statement in PostgreSQL is: ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n); table_name.


1 Answers

The standard names for indexes in PostgreSQL are:

{tablename}_{columnname(s)}_{suffix}

where the suffix is one of the following:

  • pkey for a Primary Key constraint
  • key for a Unique constraint
  • excl for an Exclusion constraint
  • idx for any other kind of index
  • fkey for a Foreign key
  • check for a Check constraint

Standard suffix for sequences is

  • seq for all sequences

Proof of your UNIQUE-constraint:

NOTICE: CREATE TABLE / UNIQUE will create implicit index "example_a_b_key" for table "example"

like image 56
Frank Heikens Avatar answered Oct 11 '22 09:10

Frank Heikens