PostgreSQL🔗
Installation🔗
Debian/Ubuntu
sudo apt update
sudo apt install postgresql postgresql-contrib
# check service status
sudo systemctl status postgresql
macOS
Setup🔗
NOTE: Ideally you should not expose your database to public network.
Edit pg_hba.conf
(usually located at /etc/postgresql/<version>/main/pg_hba.conf
)
Edit postgresql.conf
to listen on all interfaces
Security🔗
- Change default password
- Restrict Access: Use
pg_hba.conf
to control access
- Enable SSL: Edit
postgresql.conf
ssl = on
ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'
- Audit Logging
- Regular Backup: Use
pg_dump
for backup
Useful Commands🔗
1. Connecting to PostgreSQL🔗
2. Managing a Database🔗
# creation
CREATE DATABASE dbname;
# deletion
DROP DATABASE dbname;
# Backup a Database
pg_dump -U username -d dbname -f backup.sql
# Restoring a Backup
psql -U username -d dbname -f backup.sql
3. Managing Tables🔗
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
);
# list tables
\dt
# describe a table
\d tablename
# delete a table
DROP TABLE tablename;
4. Querying Data🔗
SELECT * FROM users;
SELECT * FROM users WHERE id = 1;
SELECT * FROM users ORDER BY name ASC;
SELECT * FROM users LIMIT 10;
5. Inserting and Updating and Deleting Data🔗
INSERT INTO users (name, email) VALUES ('John', '[email protected]');
UPDATE users SET email = '[email protected]' WHERE id = 1;
DELETE FROM users WHERE id = 1;
6. Indexes🔗
CREATE INDEX idx_users_email ON users (email);
# list indices
\di
# dropping indices
DROP INDEX idx_users_email;
7. User and Permission🔗
# create a user
CREATE USER username WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE dbname TO username;
REVOKE ALL PRIVILEGES ON DATABASE dbname FROM username;
# list users
\du
8. Troubleshooting🔗
# check active connections
SELECT * FROM pg_stat_activity;
# kill a connection
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid = 12345;
# check locks
SELECT * FROM pg_locks;
9. Exporting and Importing Data🔗
# export
\copy (SELECT * FROM users) TO 'users.csv' CSV HEADER;
# import
\copy users FROM 'users.csv' CSV HEADER;
10. Transactions🔗
BEGIN;
UPDATE users SET email = '[email protected]' WHERE id = 1;
COMMIT;