You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# connect to a local database
psql -d database_name
# connect with user, host, and port
psql -U user_name -h localhost -p 5432 -d database_name
# run one SQL command from the shell
psql -d database_name -c "SELECT version();"# run SQL from a file
psql -d database_name -f script.sql
psql Navigation
-- list databases
\l
-- connect to a database
\c database_name
-- list tables
\dt
-- describe a table
\d table_name
-- show query timing
\timing
-- quit psql
\q
Databases and Tables
-- create a databaseCREATEDATABASEdatabase_name;
-- drop a databaseDROPDATABASE database_name;
-- create a tableCREATETABLEsamples (
id SERIALPRIMARY KEY,
sample_name TEXTNOT NULL,
count INTEGER,
created_at TIMESTAMP DEFAULT now()
);
-- drop a tableDROPTABLE samples;
Select and Filter
-- select all columnsSELECT*FROM samples
LIMIT10;
-- select specific columnsSELECT sample_name, count
FROM samples;
-- filter rowsSELECT*FROM samples
WHERE count >10;
-- sort rowsSELECT*FROM samples
ORDER BY count DESC;
-- find text with a case-insensitive matchSELECT*FROM samples
WHERE sample_name ILIKE '%tumor%';
Joins and Grouping
-- join two tablesSELECTs.sample_name, p.project_nameFROM samples AS s
JOIN projects AS p ONs.project_id=p.id;
-- keep rows even when the joined table has no matchSELECTs.sample_name, p.project_nameFROM samples AS s
LEFT JOIN projects AS p ONs.project_id=p.id;
-- count rows by groupSELECT project_id, COUNT(*) AS sample_count
FROM samples
GROUP BY project_id;
-- filter grouped resultsSELECT project_id, COUNT(*) AS sample_count
FROM samples
GROUP BY project_id
HAVINGCOUNT(*) >5;
Insert, Update, and Delete
-- insert one rowINSERT INTO samples (sample_name, count)
VALUES ('sample_a', 10);
-- insert multiple rowsINSERT INTO samples (sample_name, count)
VALUES
('sample_a', 10),
('sample_b', 20);
-- update rowsUPDATE samples
SET count =25WHERE sample_name ='sample_b';
-- delete rowsDELETEFROM samples
WHERE sample_name ='sample_b';
CSV Import and Export
-- import CSV from the psql client machine
\copy samples(sample_name, count) FROM'samples.csv' WITH CSV HEADER
-- export CSV to the psql client machine
\copy samples TO 'samples_export.csv' WITH CSV HEADER
Backup and Restore
# back up one database as SQL text
pg_dump database_name > backup.sql
# restore a SQL text backup
psql -d database_name < backup.sql
# back up one database in custom format
pg_dump -Fc database_name > backup.dump
# restore a custom-format backup
pg_restore -d database_name backup.dump
Admin
-- create a userCREATEUSERuser_name WITH PASSWORD 'password';
-- grant database privilegesGRANT ALL PRIVILEGES ON DATABASE database_name TO user_name;
-- show active queriesSELECT pid, state, query
FROM pg_stat_activity;
-- cancel a query by process IDSELECT pg_cancel_backend(pid);