PostgreSQL | ALTER Constraints and Table Names

Rename a table

Syntax

ALTER TABLE {table name} RENAME TO {new table name};

Example

ALTER TABLE test RENAME TO test_bak;

Rename a constraint

Syntax

ALTER INDEX {constraint name} RENAME TO {new constraint name};

Example

ALTER INDEX pk_test RENAME TO pk_test_bak;

Add a column

ALTER TABLE books ADD publication date;

Rename a column

ALTER TABLE books RENAME COLUMN in_stock TO is_in_stock;

Delete a column

ALTER TABLE books DROP COLUMN IF EXISTS publication;

Add a column default value

ALTER TABLE books ALTER COLUMN id SET DEFAULT nextval('books_idx');

Remove a column default value

ALTER TABLE books ALTER id DROP DEFAULT;

Set column NOT NULL

ALTER TABLE books ALTER COLUMN id SET NOT NULL;

Remove column NOT NULL

ALTER TABLE books ALTER COLUMN id DROP NOT NULL;

Change a column data type

ALTER TABLE books ALTER COLUMN publication TYPE text;

Add constraints

ALTER TABLE editions ADD CONSTRAINT foreign_book FOREIGN KEY (book_id) REFERENCES books (id);
ALTER TABLE editions ADD CONSTRAINT hard_or_paper_back CHECK (type='p' OR type='h');

Change constraints (drop and add, without direct modification)

ALTER TABLE editions DROP CONSTRAINT editions_type_check;
ALTER TABLE editions ADD CONSTRAINT editions_type_check CHECK (type=ANY);

Change table owner

ALTER TABLE employees OWNER TO corwin;

Rebuild a table

Rebuild a table.

Method 1

CREATE TABLE new_books (id, title, author_id, subject_id) AS SELECT id, title, author_id, subject_id FROM books;  
ALTER TABLE books RENAME TO old_books;  
ALTER TABLE books RENAME TO books;  
DROP TABLE old_books;

Method 2

CREATE TABLE new_books (id integer UNIQUE, title text NOT NULL, author_id integer, subject_id integer, CONSTRAINT books_id_pkey PRIMARY KEY);  
INSERT INTO new_books SELECT id, title, author_id, subject_id FROM books;  
ALTER TABLE books RENAME TO old_books;  
ALTER TABLE new_books RENAME TO books;  
DROP TABLE old_books;