Cheatsheet - PostgreSQL
For psql, check out Cheatsheet - psql
Connecting & psql Meta-Commands
Once you're in the psql
interactive terminal, you can use these helpful "meta-commands," which are preceded by a backslash.
- Connect to a database:
\c <database_name>
- List all databases:
\l
or\list
- List all tables in the current database:
\dt
- Describe a table (columns, types, etc.):
\d <table_name>
- List all users and their roles:
\du
- Get help on a specific SQL command:
\h <SQL_COMMAND>
(e.g.,\h CREATE TABLE
) - Quit psql:
\q
- Toggle expanded display for wide results:
\x
Data Definition Language (DDL)
These commands are used to define and manage the structure of your database.
-
Create a Database:
CREATE DATABASE <database_name>;
-
Drop a Database:
DROP DATABASE <database_name>;
-
Create a Table:
CREATE TABLE <table_name> (
column1_name data_type constraints,
column2_name data_type,
...
);
- Create a Table with a Primary Key:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE
);
- Drop a Table:
DROP TABLE <table_name>;
- Alter a Table:
- Add a column:
ALTER TABLE <table_name> ADD COLUMN <new_column_name> data_type;
- Drop a column:
ALTER TABLE <table_name> DROP COLUMN <column_name>;
- Rename a column:
ALTER TABLE <table_name> RENAME COLUMN <old_name> TO <new_name>;
- Change a column's data type:
ALTER TABLE <table_name> ALTER COLUMN <column_name> TYPE new_data_type;
Data Manipulation Language (DML)
Use these commands to interact with the data within your tables.
- Insert a Single Row:
INSERT INTO <table_name> (column1, column2) VALUES (value1, value2);
- Insert Multiple Rows:
INSERT INTO <table_name> (column1, column2) VALUES
(value1, value2),
(value3, value4),
(value5, value6);
- Update Records:
UPDATE <table_name> SET column1 = new_value WHERE condition;
- Delete Records:
DELETE FROM <table_name> WHERE condition;
Data Query Language (DQL)
These commands are used to retrieve data from your database.
- Select All Columns:
SELECT * FROM <table_name>;
- Select Specific Columns:
SELECT column1, column2 FROM <table_name>;
- Filtering with WHERE:
SELECT * FROM <table_name> WHERE condition;
- Sorting with ORDER BY:
SELECT * FROM <table_name> ORDER BY column_name ASC|DESC;
- Limiting Results:
SELECT * FROM <table_name> LIMIT 10;
- Unique Values:
SELECT DISTINCT column_name FROM <table_name>;
- Aggregate Functions:
AVG()
,COUNT()
,MAX()
,MIN()
,SUM()
- Grouping Data:
SELECT column1, COUNT(*) FROM <table_name> GROUP BY column1;
- Filtering Groups:
SELECT column1, COUNT(*) FROM <table_name> GROUP BY column1 HAVING COUNT(*) > 5;
Joins
Combine rows from two or more tables based on a related column.
- Inner Join:
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id;
- Left Join:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id;
- Right Join:
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id;
- Full Outer Join:
SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.id = table2.table1_id;
Common Data Types
PostgreSQL supports a wide range of data types.
- Numeric:
INTEGER
,BIGINT
,NUMERIC(precision, scale)
,REAL
,DOUBLE PRECISION
,SERIAL
- Character:
VARCHAR(n)
,CHAR(n)
,TEXT
- Date/Time:
DATE
,TIME
,TIMESTAMP
,INTERVAL
- Boolean:
BOOLEAN
- JSON:
JSON
,JSONB
- UUID:
UUID
User and Permission Management
These commands are used to manage users and their access to database objects.
- Create a User:
CREATE USER <username> WITH PASSWORD '<password>';
- Drop a User:
DROP USER <username>;
- Grant Privileges:
GRANT ALL PRIVILEGES ON DATABASE <database_name> TO <username>;
- Grant specific permissions on a table:
GRANT SELECT, INSERT, UPDATE, DELETE ON <table_name> TO <username>;
- Grant all permissions on all tables in a schema:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema_name> TO <username>;
- Revoke Privileges:
REVOKE ALL PRIVILEGES ON DATABASE <database_name> FROM <username>;
Backup and Restore
Use these command-line utilities to back up and restore your databases.
Backup a Database:
pg_dump -U <username> -W -F c -f <backup_file.dump> <database_name>
-U
: Specifies the user to connect as.-W
: Forces a password prompt.-F c
: Specifies the output format as custom (compressed).-f
: Specifies the output file.
Restore a Database:
pg_restore -U <username> -W -d <database_name> <backup_file.dump>
-d
: Specifies the database to restore to.
Start server
$ postgres -D /path/to/data
# start in the background
$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &
Check pg_hba.conf
pg_hba.conf controls client authentication (HBA stands for host-based authentication.)
$ find / -name "pg_hba.conf"
pg_hba.conf
file format: a set of records, one per line.
Check readiness
Use pg_isready