Bỏ túi cheatsheet PostgreSQL hữu ích cho mọi developer

608

Bài viết được sự cho phép của tác giả Nguyễn Thành Nam

I. Tổng hợp PostgreSQL Cheatsheet

1. Cơ bản

Các lệnh dưới đây giúp bạn bắt đầu với PostgreSQL, bao gồm chuyển đổi và kết nối, liệt kê cơ sở dữ liệu, kết nối đến một cơ sở dữ liệu cụ thể, và ngắt kết nối.

# Chuyển đổi và kết nối
$ sudo -u postgres psql
# Liệt kê tất cả cơ sở dữ liệu
postgres=# l
# Kết nối đến cơ sở dữ liệu có tên là postgres
postgres=# c postgres
# Ngắt kết nối
postgres=# q
postgres=# !

⚡️ Các lệnh psql

Tùy chọn Ví dụ Mô tả
[-d] <database> psql -d mydb Kết nối đến cơ sở dữ liệu
-U psql -U john mydb Kết nối với một người dùng cụ thể
-h -p psql -h localhost -p 5432 mydb Kết nối đến một máy chủ/địa chỉ cụ thể
-U -h -p -d psql -U admin -h 192.168.1.5 -p 2506 -d mydb Kết nối PostgreSQL từ xa
-W psql -W mydb Yêu cầu nhập mật khẩu
-c psql -c ‘c postgres’ -c ‘dt’ Thực thi một truy vấn SQL hoặc lệnh
-H psql -c “l+” -H postgres > database.html Tạo báo cáo HTML
-l psql -l Liệt kê tất cả các cơ sở dữ liệu
-f psql mydb -f file.sql Thực thi các lệnh từ một tập tin
-V psql -V In phiên bản của psql

⚡️ Nhận trợ giúp: Chạy trong PostgreSQL console

Lệnh Mô tả
h Trợ giúp về cú pháp của các lệnh SQL
h DELETE Cú pháp câu lệnh SQL DELETE
? Danh sách các lệnh PostgreSQL

2. PostgreSQL Working

⚡️ Recon: Các truy vấn SQL được sử dụng để thu thập thông tin về phiên bản, trạng thái hệ thống, biến môi trường, người dùng, cơ sở dữ liệu, bảng, và hàm trong PostgreSQL.

-- Hin th phiên bn
SHOW SERVER_VERSION;
-- Hin th trng thái h thng
conninfo
-- Hin th biến môi trường
SHOW ALL;
-- Lit kê người dùng
SELECT rolname FROM pg_roles;
-- Hin th người dùng hin ti
SELECT current_user;
-- Hin th quyn ca người dùng hin ti
du
-- Hin th cơ s d liu hin ti
SELECT current_database();
-- Hin th tt c các bng trong cơ s d liu
dt
-- Lit kê các hàm
df <schema>

⚡️ Databases

-- Lit kê các cơ s d liu
l
-- Kết ni đến cơ s d liu
c <database_name>
-- Hin th cơ s d liu hin ti
SELECT current_database();
-- To cơ s d liu
CREATE DATABASE <database_name> WITH OWNER <username>;
-- Xóa cơ s d liu
DROP DATABASE IF EXISTS <database_name>;
-- Đổi tên cơ s d liu
ALTER DATABASE <old_name> RENAME TO <new_name>;

⚡️ Tables

-- Lit kê các bng trong cơ s d liu hin ti
dt

-- Hoc
SELECT table_schema, table_name FROM information_schema.tables ORDER BY table_schema, table_name;
-- Lit kê tt c các bng toàn cu
dt *.*.

-- Hoc
SELECT * FROM pg_catalog.pg_tables
-- Hin th schema ca bng
d <table_name>

-- Hoc
d+ <table_name>

-- Hoc
SELECT column_name, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = '<table_name>';
-- To bng
CREATE TABLE <table_name>(
  <column_name> <column_type>,
  <column_name> <column_type>
);
-- To bng vi khóa chính t tăng
CREATE TABLE <table_name> (
  <column_name> SERIAL PRIMARY KEY
);
-- Xóa bng
DROP TABLE IF EXISTS <table_name> CASCADE;

⚡️ Quyền hạn (Permissions)

-- Tr thành người dùng postgres, nếu bn gp li quyn hn
sudo su - postgres
psql
-- Cp tt c quyn hn cho cơ s d liu
GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <user_name>;
-- Cp quyn kết ni cho cơ s d liu
GRANT CONNECT ON DATABASE <db_name> TO <user_name>;
-- Cp quyn s dng cho schema
GRANT USAGE ON SCHEMA public TO <user_name>;
-- Cp quyn thc thi cho các hàm
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO <user_name>;
-- Cp quyn chn, cp nht, thêm mi vào tt c các bng
GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO <user_name>;
-- Cp quyn chn, cp nht, thêm mi vào mt bng
GRANT SELECT, UPDATE, INSERT ON <table_name> TO <user_name>;
-- Cp quyn chn cho tt c các bng trong schema public
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user_name>;

⚡️ Cột (Columns)

-- Thêm ct
ALTER TABLE <table_name> IF EXISTS
ADD <column_name> <data_type> [<constraints>];
-- Cp nht ct
ALTER TABLE <table_name> IF EXISTS
ALTER <column_name> TYPE <data_type> [<constraints>];
-- Xóa ct
ALTER TABLE <table_name> IF EXISTS
DROP <column_name>;
-- Cp nht ct để làm khóa chính t tăng
ALTER TABLE <table_name>
ADD COLUMN <column_name> SERIAL PRIMARY KEY;
-- Chèn d liu vào bng, vi khóa chính t tăng
INSERT INTO <table_name>
VALUES (DEFAULT, <value1>);

-- Hoc
INSERT INTO <table_name> (<column1_name>, <column2_name>)
VALUES (<value1>, <value2>);

⚡️ Dữ liệu (databases): Các câu lệnh được sử dụng để truy vấn và thao tác dữ liệu trong PostgreSQL.

-- Chn tt c d liu
SELECT * FROM <table_name>;
-- Đọc mt hàng d liu
SELECT * FROM <table_name> LIMIT 1;
-- Tìm kiếm d liu
SELECT * FROM <table_name> WHERE <column_name> = <value>;
-- Chèn d liu
INSERT INTO <table_name> VALUES(<value_1>, <value_2>);
-- Cp nht d liu
UPDATE <table_name>
SET <column_1> = <value_1>, <column_2> = <value_2>
WHERE <column_1> = <value>;
-- Xóa tt c d liu
DELETE FROM <table_name>;
-- Xóa d liu c th
DELETE FROM <table_name>
WHERE <column_name> = <value>;

⚡️ Người dùng (Users)

-- Lit kê các vai trò
SELECT rolname FROM pg_roles;
-- To người dùng
CREATE USER <user_name> WITH PASSWORD '<password>';
-- Xóa người dùng
DROP USER IF EXISTS <user_name>;
-- Thay đổi mt khu người dùng
ALTER ROLE <user_name> WITH PASSWORD '<password>';

⚡️ Schema

-- Lit kê các schema
dn

-- Hoc
SELECT schema_name FROM information_schema.schemata;

-- Hoc
SELECT nspname FROM pg_catalog.pg_namespace;
-- To schema
CREATE SCHEMA IF NOT EXISTS <schema_name>;
-- Xóa schema
DROP SCHEMA IF EXISTS <schema_name> CASCADE;

⚡️ Dates

-- Hin th ngày hin ti theo định dng YYYY-MM-DD
SELECT current_date;
-- Tính tui gia hai ngày
SELECT age(timestamp, timestamp);
-- Hin th thi gian hin ti vi múi gi
SELECT current_time;
-- To ngày s dng các s nguyên
SELECT make_date(2021, 03, 25);

3. PostgreSQL Commands

⚡️ Tables

Lệnh Mô tả
d <table> Miêu tả bảng
d+ <table> Miêu tả bảng với chi tiết
dt Liệt kê bảng từ schema hiện tại
dt . Liệt kê bảng từ tất cả schemas
dt <schema>.* Liệt kê bảng cho một schema
dp Liệt kê quyền truy cập bảng
det[+] Liệt kê bảng ngoại trời

⚡️ Query buffer: các lệnh thường được sử dụng để chỉnh sửa và quản lý nội dung của bộ lệnh truy vấn trong PostgreSQL.

Lệnh Mô tả
e [FILE] Chỉnh sửa bộ lệnh truy vấn (hoặc file)
ef [FUNC] Chỉnh sửa định nghĩa hàm
p Hiển thị nội dung
r Đặt lại (xóa) bộ lệnh truy vấn
s [FILE] Hiển thị lịch sử hoặc lưu nó vào file
w FILE Ghi bộ lệnh truy vấn vào file

⚡️ Thông tin

  • S: hiển thị các đối tượng hệ thống.
  • +: chi tiết bổ sung.
Lệnh Mô tả
l[+] Liệt kê tất cả cơ sở dữ liệu
dn[S+] Liệt kê các schema
di[S+] Liệt kê các chỉ mục
du[+] Liệt kê các vai trò
ds[S+] Liệt kê các chuỗi số
df[antw][S+] Liệt kê các hàm
deu[+] Liệt kê các ánh xạ người dùng
dv[S+] Liệt kê các view
dl Liệt kê các đối tượng lớn
dT[S+] Liệt kê các loại dữ liệu
da[S] Liệt kê các hợp nhất
db[+] Liệt kê các không gian bảng
dc[S+] Liệt kê các chuyển đổi
dC[+] Liệt kê các chuyển đổi
ddp Liệt kê quyền mặc định
dd[S] Hiển thị mô tả đối tượng
dD[S+] Liệt kê các miền
des[+] Liệt kê máy chủ ngoại trời
dew[+] Liệt kê các bọc dữ liệu ngoại trời
dF[+] Liệt kê cấu hình tìm kiếm văn bản
dFd[+] Liệt kê từ điển tìm kiếm văn bản
dFp[+] Liệt kê bộ phân tích tìm kiếm văn bản
dFt[+] Liệt kê mẫu tìm kiếm văn bản
dL[S+] Liệt kê ngôn ngữ thủ tục
do[S] Liệt kê các toán tử
dO[S+] Liệt kê các so sánh
drds Liệt kê cài đặt vai trò mặc định
dx[+] Liệt kê các tiện ích mở rộng

⚡️ Kết nối (Connection)

Lệnh Mô tả
c [DBNAME] Kết nối đến cơ sở dữ liệu mới
encoding [ENCODING] Hiển thị hoặc đặt mã hóa máy khách
password [USER] Thay đổi mật khẩu
conninfo Hiển thị thông tin

⚡️ Định dạng (Formatting)

Lệnh Mô tả
a Chuyển đổi giữa chế độ không căn chỉnh và căn chỉnh
C [STRING] Đặt tiêu đề bảng, hoặc hủy nếu không có
f [STRING] Hiển thị hoặc đặt ngăn cách trường cho chế độ không căn chỉnh
H Chuyển đổi chế độ xuất HTML
t [on|off] Hiển thị chỉ các hàng
T [STRING] Đặt hoặc hủy bỏ các thuộc tính thẻ HTML <table>
x [on|off] Chuyển đổi đầu ra mở rộng

⚡️ Input/Output

Lệnh Mô tả
copy … Nhập/xuất bảng
echo [STRING] In chuỗi
i FILE Thực thi tệp
o [FILE] Xuất tất cả kết quả ra file
qecho [STRING] Chuỗi đầu ra luồng

⚡️ Variables

Lệnh Mô tả
prompt [TEXT] NAME Đặt biến
set [NAME [VALUE]] Đặt biến (hoặc liệt kê tất cả nếu không có tham số)
unset NAME Xóa biến

⚡️ Misc

Lệnh Mô tả
cd [DIR] Thay đổi thư mục
timing [on|off] Chuyển đổi đồng hồ
! [COMMAND] Thực thi trong shell
! ls -l Liệt kê tất cả trong shell

4. Miscellaneous

⚡️ Sao lưu (Backup): sao lưu cơ sở dữ liệu PostgreSQL bằng các công cụ pg_dump và pg_dumpall

# Sử dụng pg_dumpall để sao lưu tất cả cơ sở dữ liệu
$ pg_dumpall -U postgres > all.sql
# Sử dụng pg_dump để sao lưu một cơ sở dữ liệu
$ pg_dump -d mydb -f mydb_backup.sql
  -a   Dump ch d liu, không có cu trúc
  -s   Dump ch cu trúc, không có d liu
  -c   Xóa cơ s d liu trước khi tái to
  -C   To cơ s d liu trước khi khôi phc
  -t   Dump ch bng(s) được đặt tên
  -F   Định dng (c: tùy chnh, d: thư mc, t: tar)

Sử dụng pg_dump -? để xem danh sách đầy đủ các tùy chọn.

⚡️ Khôi phục (Restore): khôi phục cơ sở dữ liệu PostgreSQL bằng các công cụ psql và pg_restore.

# Khôi phục một cơ sở dữ liệu với psql
$ psql -U user mydb < mydb_backup.sql
# Khôi phục một cơ sở dữ liệu với pg_restore
$ pg_restore -d mydb mydb_backup.sql -c
  -U   Ch định người dùng cơ s d liu
  -c   Xóa cơ s d liu trước khi tái to
  -C   To cơ s d liu trước khi khôi phc
  -e   Thoát nếu gp li
  -F   Định dng (c: tùy chnh, d: thư mc, t: tar, p: văn bn thô sql (mc định))

Sử dụng pg_restore -? để xem danh sách đầy đủ các tùy chọn.

⚡️ Truy cập từ xa (Remote access): sử dụng để cấu hình và khởi động lại PostgreSQL để cho phép truy cập từ xa.

# Lấy vị trí của postgresql.conf
$ psql -U postgres -c 'SHOW config_file'
# Thêm vào postgresql.conf
listen_addresses = '*'
# Thêm vào pg_hba.conf (Cùng vị trí với postgresql.conf)
host  all  all  0.0.0.0/0  md5
host  all  all  ::/0       md5
# Khởi động lại máy chủ PostgreSQL
$ sudo systemctl restart postgresql

⚡️ Nhập/Xuất CSV

# Xuất bảng vào tệp CSV
copy table TO '<path>' CSV
copy table(col1,col1) TO '<path>' CSV
copy (SELECT...) TO '<path>' CSV
# Nhập tệp CSV vào bảng
copy table FROM '<path>' CSV
copy table(col1,col1) FROM '<path>' CSV

Bài viết gốc được đăng tải tại blog.thanhnamnguyen.dev

Xem thêm:

Đừng bỏ lỡ nhiều việc làm IT hấp dẫn trên TopDev nhé!