Bỏ túi cheatsheet PostgreSQL hữu ích cho mọi developer
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.
-- Hiển thị phiên bản
SHOW SERVER_VERSION;
-- Hiển thị trạng thái hệ thống
\conninfo
-- Hiển thị biến môi trường
SHOW ALL;
-- Liệt kê người dùng
SELECT rolname FROM pg_roles;
-- Hiển thị người dùng hiện tại
SELECT current_user;
-- Hiển thị quyền của người dùng hiện tại
\du
-- Hiển thị cơ sở dữ liệu hiện tại
SELECT current_database();
-- Hiển thị tất cả các bảng trong cơ sở dữ liệu
\dt
-- Liệt kê các hàm
\df <schema>
⚡️ Databases
-- Liệt kê các cơ sở dữ liệu
\l
-- Kết nối đến cơ sở dữ liệu
\c <database_name>
-- Hiển thị cơ sở dữ liệu hiện tại
SELECT current_database();
-- Tạo cơ sở dữ liệu
CREATE DATABASE <database_name> WITH OWNER <username>;
-- Xóa cơ sở dữ liệu
DROP DATABASE IF EXISTS <database_name>;
-- Đổi tên cơ sở dữ liệu
ALTER DATABASE <old_name> RENAME TO <new_name>;
⚡️ Tables
-- Liệt kê các bảng trong cơ sở dữ liệu hiện tại
\dt
-- Hoặc
SELECT table_schema, table_name FROM information_schema.tables ORDER BY table_schema, table_name;
-- Liệt kê tất cả các bảng toàn cầu
\dt *.*.
-- Hoặc
SELECT * FROM pg_catalog.pg_tables
-- Hiển thị schema của bảng
\d <table_name>
-- Hoặc
\d+ <table_name>
-- Hoặc
SELECT column_name, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = '<table_name>';
-- Tạo bảng
CREATE TABLE <table_name>(
<column_name> <column_type>,
<column_name> <column_type>
);
-- Tạo bảng với khóa chính tự tăng
CREATE TABLE <table_name> (
<column_name> SERIAL PRIMARY KEY
);
-- Xóa bảng
DROP TABLE IF EXISTS <table_name> CASCADE;
⚡️ Quyền hạn (Permissions)
-- Trở thành người dùng postgres, nếu bạn gặp lỗi quyền hạn
sudo su - postgres
psql
-- Cấp tất cả quyền hạn cho cơ sở dữ liệu
GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <user_name>;
-- Cấp quyền kết nối cho cơ sở dữ liệu
GRANT CONNECT ON DATABASE <db_name> TO <user_name>;
-- Cấp quyền sử dụng cho schema
GRANT USAGE ON SCHEMA public TO <user_name>;
-- Cấp quyền thực thi cho các hàm
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO <user_name>;
-- Cấp quyền chọn, cập nhật, thêm mới vào tất cả các bảng
GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO <user_name>;
-- Cấp quyền chọn, cập nhật, thêm mới vào một bảng
GRANT SELECT, UPDATE, INSERT ON <table_name> TO <user_name>;
-- Cấp quyền chọn cho tất cả các bảng trong schema public
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user_name>;
⚡️ Cột (Columns)
-- Thêm cột
ALTER TABLE <table_name> IF EXISTS
ADD <column_name> <data_type> [<constraints>];
-- Cập nhật cột
ALTER TABLE <table_name> IF EXISTS
ALTER <column_name> TYPE <data_type> [<constraints>];
-- Xóa cột
ALTER TABLE <table_name> IF EXISTS
DROP <column_name>;
-- Cập nhật cột để làm khóa chính tự tăng
ALTER TABLE <table_name>
ADD COLUMN <column_name> SERIAL PRIMARY KEY;
-- Chèn dữ liệu vào bảng, với khóa chính tự tăng
INSERT INTO <table_name>
VALUES (DEFAULT, <value1>);
-- Hoặc
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.
-- Chọn tất cả dữ liệu
SELECT * FROM <table_name>;
-- Đọc một hàng dữ liệu
SELECT * FROM <table_name> LIMIT 1;
-- Tìm kiếm dữ liệu
SELECT * FROM <table_name> WHERE <column_name> = <value>;
-- Chèn dữ liệu
INSERT INTO <table_name> VALUES(<value_1>, <value_2>);
-- Cập nhật dữ liệu
UPDATE <table_name>
SET <column_1> = <value_1>, <column_2> = <value_2>
WHERE <column_1> = <value>;
-- Xóa tất cả dữ liệu
DELETE FROM <table_name>;
-- Xóa dữ liệu cụ thể
DELETE FROM <table_name>
WHERE <column_name> = <value>;
⚡️ Người dùng (Users)
-- Liệt kê các vai trò
SELECT rolname FROM pg_roles;
-- Tạo 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 mật khẩu người dùng
ALTER ROLE <user_name> WITH PASSWORD '<password>';
⚡️ Schema
-- Liệt kê các schema
\dn
-- Hoặc
SELECT schema_name FROM information_schema.schemata;
-- Hoặc
SELECT nspname FROM pg_catalog.pg_namespace;
-- Tạo schema
CREATE SCHEMA IF NOT EXISTS <schema_name>;
-- Xóa schema
DROP SCHEMA IF EXISTS <schema_name> CASCADE;
⚡️ Dates
-- Hiển thị ngày hiện tại theo định dạng YYYY-MM-DD
SELECT current_date;
-- Tính tuổi giữa hai ngày
SELECT age(timestamp, timestamp);
-- Hiển thị thời gian hiện tại với múi giờ
SELECT current_time;
-- Tạo ngày sử dụng 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ữ liệu, không có cấu trúc
-s Dump chỉ cấu trúc, không có dữ liệu
-c Xóa cơ sở dữ liệu trước khi tái tạo
-C Tạo cơ sở dữ liệu trước khi khôi phục
-t Dump chỉ bảng(s) được đặt tên
-F Định dạng (c: tùy chỉnh, d: thư mục, 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ữ liệu
-c Xóa cơ sở dữ liệu trước khi tái tạo
-C Tạo cơ sở dữ liệu trước khi khôi phục
-e Thoát nếu gặp lỗi
-F Định dạng (c: tùy chỉnh, d: thư mục, t: tar, p: văn bản thô sql (mặc đị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
- Tuyển tập 25 câu hỏi phỏng vấn PostgreSQL thường gặp
- Oracle to Postgres, sự trỗi dậy của bầy voi!
- Hướng dẫn kết nối đến PostgreSQL từ Laravel
Đừng bỏ lỡ nhiều việc làm IT hấp dẫn trên TopDev nhé!
- G Giải Quyết Bài Toán Kinh Doanh Bằng Big Data và AI
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- F Framework nào tốt nhất cho dự án của bạn? – Checklist chi tiết
- K Kinh nghiệm xử lý responsive table hiệu quả
- S Stackoverflow là gì? Bí kíp tận dụng Stack Overflow hiệu quả
- 7 7 kinh nghiệm hữu ích khi làm việc với GIT trong dự án
- B Bài tập Python từ cơ bản đến nâng cao (có lời giải)
- B Bảo mật API là gì? Một số nguyên tắc và kỹ thuật cần biết
- H Hướng dẫn cài đặt và tự học lập trình Python cơ bản từ A-Z
- C Chinh Phục Phân Tích Dữ Liệu Với Pandas Trong Python: Hướng Dẫn Từng Bước