Constraints and Schema
Define tables and integrity constraints. Results appear in the same fence: same-line -- comments when short, multiline -- blocks below the sample when not.
Search across all documentation pages
Define tables and integrity constraints. Results appear in the same fence: same-line -- comments when short, multiline -- blocks below the sample when not.
Columns, nullability, defaults.
CREATE TABLE users (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
email text NOT NULL UNIQUE,
created_at timestamptz NOT NULL DEFAULT now()
);One primary key; implies unique + not null.
ALTER TABLE orders
ADD CONSTRAINT orders_pkey PRIMARY KEY (id);Reference parent keys with actions.
ALTER TABLE orders
ADD CONSTRAINT orders_user_fk
FOREIGN KEY (user_id) REFERENCES users (id)
ON DELETE RESTRICT;Row-level predicate.
ALTER TABLE products
ADD CONSTRAINT products_price_pos CHECK (price >= 0);Add columns with defaults carefully on large tables.
ALTER TABLE users
ADD COLUMN locale text NOT NULL DEFAULT 'en';Multi-column uniqueness.
ALTER TABLE enrollments
ADD CONSTRAINT enrollments_uniq UNIQUE (course_id, user_id);Prevent overlapping ranges (gist).
-- ALTER TABLE rooms ADD EXCLUDE USING gist (room_id WITH =, during WITH &&);Drop/set nullability.
ALTER TABLE users ALTER COLUMN phone DROP NOT NULL;Rename table or column.
ALTER TABLE users RENAME COLUMN full_name TO name;
ALTER TABLE users RENAME TO app_users;Remove named constraints.
ALTER TABLE products DROP CONSTRAINT products_price_pos;Stored generated columns (PG 12+).
ALTER TABLE t
ADD COLUMN full_name text
GENERATED ALWAYS AS (first_name || ' ' || last_name) STORED;Document objects for teammates and tools.
COMMENT ON COLUMN users.email IS 'Login identity';Create and search_path schemas.
CREATE SCHEMA app;
SET search_path TO app, public;
-- app.users resolves firstGENERATED ALWAYS prevents manual overrides by default.
INSERT INTO users (email) VALUES ('a@b.co') RETURNING id;
-- id from sequenceDrop dependent objects carefully.
DROP TABLE old_events CASCADE;
-- drops FKs/views depending on itStack versions: PostgreSQL 18.4 (stable 18, maintenance 17) · pgvector 0.8+
Reviewed by Chris St. John·Last updated Jul 19, 2026