Thư mục dữ liệu PostgreSQL
Để chạy một câu lệnh SQL, tạo bảng dữ liệu, hay lưu trữ dữ liệu PostgreSQL cũng như các RDBMS khác chúng ta cần một thư mục chứa dữ liệu, PostgreSQL gọi đó là database cluster. Sau khi cài đặt PostgreSQL, database cluster được tạo ra bởi lệnh initdb. Nếu bạn cài đặt qua installer trên Windows, database cluster sẽ tự động được tạo ra trong quá trình cài đặt. Sau khi tạo một database cluster, ta có thể khởi động database cluster này lên và thực hiện các câu truy vấn tuỳ ý.
Các database cluster phân biệt bởi parameter port (postgresql.conf). Ta có thể cài đặt nhiều database cluster trên một hệ điều hành bằng cách đặt port khác nhau cho mỗi database cluster.
Tạo thư mục dữ liệu
Để tạo một thư mục dữ liệu PostgreSQL (database cluster) ta sử dụng câu lệnh initdb.
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ initdb --no-locale -E utf8 -D /usr/local/pgsql/pg9600/data
The files belonging to this database system will be owned by user "bocap".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory /usr/local/pgsql/pg9600/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /usr/local/pgsql/pg9600/data -l logfile start
DangnoMacBook-Pro:postgresql-9.6.5 bocap$
Lệnh initdb nhiều options bạn có thể kiểm tra bằng option --help. Ví dụ trên mình sử dụng các options thông dụng như bên dưới.
- --no-locale: Không sử dụng locale, hay locale C. Tạo database cluster với option này, khi sắp xếp dữ liệu (ORDER BY), PostgreSQL sẽ không so sánh qua ký tự alphabet mà so sánh trực tiếp qua character code, tăng performance.
- -E hay --encoding: Chỉ định encoding cho database cluster.
- -D: thư mục cơ sở dữ liệu.
Khởi động server từ thư mục dữ liệu đã tạo.Ví dụ dưới mình sử dụng port 9605 cho database cluster này.
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ echo port=9605 >> /usr/local/pgsql/pg9600/data/postgresql.conf
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ pg_ctl start
server starting
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ LOG: database system was shut down at 2017-09-10 23:19:54 JST
LOG: MultiXact member wraparound protections are now enabled
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
Kiểm tra kết nối. Nếu không chỉ định User khi tạo database cluster (tùy chọn -U cho initdb). Mặc định User được tạo ra cho database cluster là User của OS chạy câu lệnh initdb, nên ví dụ dưới mình tạo lại user postgres cho database cluster (mình để mặc định biến môi trường PGUSER là 'postgres' nên có lỗi User không tồn tại khi truy nhập).
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ psql
FATAL: role "postgres" does not exist
psql: FATAL: role "postgres" does not exist
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ psql -U bocap -c "create user postgres password 'postgres'"
CREATE ROLE
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ psql
psql (9.6.5)
Type "help" for help.
postgres=> \q
DangnoMacBook-Pro:postgresql-9.6.5 bocap$
Cấu trúc thư mục PostgreSQL
Sau khi khởi động PostgreSQL 1 database cluster sẽ có cấu trúc như bên dưới.
Phiên bản PostgreSQL-10 sắp tới sẽ hơi khác ví dụ thư mục log pg_log (khi thiết lập lưu trữ log logging_colector = on) sẽ trở thành log, thư mục transaction log pg_xlog sẽ trở thành pg_wal, etc.
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ ll $PGDATA
total 104
-rw------- 1 bocap wheel 4 Sep 10 23:19 PG_VERSION
drwx------ 5 bocap wheel 170 Sep 10 23:19 base
drwx------ 55 bocap wheel 1870 Sep 10 23:31 global
drwx------ 3 bocap wheel 102 Sep 10 23:19 pg_clog
drwx------ 2 bocap wheel 68 Sep 10 23:19 pg_commit_ts
drwx------ 2 bocap wheel 68 Sep 10 23:19 pg_dynshmem
-rw------- 1 bocap wheel 4477 Sep 10 23:19 pg_hba.conf
-rw------- 1 bocap wheel 1636 Sep 10 23:19 pg_ident.conf
drwx------ 4 bocap wheel 136 Sep 10 23:19 pg_logical
drwx------ 4 bocap wheel 136 Sep 10 23:19 pg_multixact
drwx------ 3 bocap wheel 102 Sep 10 23:31 pg_notify
drwx------ 2 bocap wheel 68 Sep 10 23:19 pg_replslot
drwx------ 2 bocap wheel 68 Sep 10 23:19 pg_serial
drwx------ 2 bocap wheel 68 Sep 10 23:19 pg_snapshots
drwx------ 2 bocap wheel 68 Sep 10 23:31 pg_stat
drwx------ 4 bocap wheel 136 Sep 10 23:31 pg_stat_tmp
drwx------ 3 bocap wheel 102 Sep 10 23:19 pg_subtrans
drwx------ 2 bocap wheel 68 Sep 10 23:19 pg_tblspc
drwx------ 2 bocap wheel 68 Sep 10 23:19 pg_twophase
drwx------ 4 bocap wheel 136 Sep 10 23:19 pg_xlog
-rw------- 1 bocap wheel 88 Sep 10 23:19 postgresql.auto.conf
-rw------- 1 bocap wheel 22267 Sep 10 23:20 postgresql.conf
-rw------- 1 bocap wheel 37 Sep 10 23:31 postmaster.opts
-rw------- 1 bocap wheel 86 Sep 10 23:31 postmaster.pid
DangnoMacBook-Pro:postgresql-9.6.5 bocap$
Nội dung các files trong 1 thư mục dữ liệu PostgreSQL (PGDATA)
Folder/files |
Nội dung |
---|
PG_VERSION |
File chứa nội dung phiên bản PostgreSQL hiện tại ví dụ:
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ cat $PGDATA/PG_VERSION
9.6
|
base |
Thư mục con chứa dữ liệu của các database trong database cluster. Trong thư mục này chứa các thư mục con nữa cho mỗi database. Tên thư mục đặt theo oid của database tương ứng.
ví dụ:
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ ll $PGDATA/base
total 0
drwx------ 270 bocap wheel 9180 Sep 10 23:19 1
drwx------ 270 bocap wheel 9180 Sep 10 23:19 12668
drwx------ 271 bocap wheel 9214 Sep 10 23:32 12669
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ psql
psql (9.6.5)
Type "help" for help.
postgres=>; select oid, datname from pg_database;
oid | datname
-------+-----------
12669 | postgres
1 | template1
12668 | template0
(3 rows)
postgres=>;
|
global |
Thư mục con chứa các bảng sử dụng nội bộ trong PostgreSQL (system catalog). Ví dụ như catalog chứa thông tin về database pg_database. |
pg_commit_ts |
Thư mục con chứa thông tin về trạng thái commit của dữ liệu timestamp. |
pg_clog |
Thư mục con chứa thông tin về trạng thái commit của transaction trên database cluster hiện tại. Mỗi bit dữ liệu chứa thông tin trạng thái cho một transaction. offset của file trong thư mục này tương ứng với transaction ID, vì vậy PostgreSQL có thể xem thông tin trạng thái transaction thông qua offset đó. |
pg_dynshmem |
Thư mục con chứa các file sử dụng dynamic shared memory. |
pg_logical |
Thư mục con chứa trạng thái dữ liệu sử dụng trong chức năng logical decoding (chức năng decoding dữ liệu từ WAL). |
pg_multixact |
Thư mục con chứa dữ liệu trạng thái multitransaction (sử dụng cho locks mức độ dòng dữ liệu). |
pg_notify |
Thư mục con chứa dữ liệu về chức năng LISTEN/NOTIFY. |
pg_replslot |
Thư mục con chứa dữ liệu về replication slot |
pg_serial |
Thư mục con chứa thông tin về các transaction commited ở mức độ phân li serializable. |
pg_snapshots |
Thư mục con chứa thông tin về các snapshots đã xuất. |
pg_stat |
Thư mục con chứa các files thông tin thống kê về PostgreSQL đang được sử dụng hiện tại. |
pg_stat_tmp |
Thư mục con chứa các files thông tin thống kê về PostgreSQL tạm thời, chưa được đưa vào sử dụng. |
pg_subtrans |
Thư mục con chứa dữ liệu về các subtransaction (khi sử dụng SAVEPOINT). |
pg_tblspc |
Thư mục con chứa thông tin symbolic links tới các tablespaces. khi tạo 1 TABLESPACE để chứa dữ liệu bên ngoài database cluster, PostgreSQL sẽ tạo một symbolic links tới thư mục tạo từ TABLESPACE trong thư mục này. |
pg_twophase |
Thư mục con chứa các tập tin trạng thái cho các prepared transactions. |
pg_xlog |
Thư mục con chứa thông tin về WAL files. Phiên bản PostgreSQL 10, thư mục này chuyển thành pg_wal. |
postgresql.auto.conf |
File chứa thông tin về các cấu hình tham số thiết lập bởi lệnh ALTER SYSTEM. |
postmaster.opts |
A file recording the command-line options the server was last started with. File này chứa thông tin về các tuỳ chọn lần cuối của lệnh khởi động PostgreSQL. ví dụ:
DangnoMacBook-Pro:postgresql-9.6.5 bocap$ cat /usr/local/pgsql/pg9600/data/postmaster.opts
/usr/local/pgsql/pg9600/bin/postgres
|
postmaster.pid |
File này tạo ra khi khởi động PostgreSQL và mất đi khi shutdown PostgreSQL. File chứa thông tin về PID của postmaster process, đường dẫn thư mục dữ liệu, thời gian khởi động, số hiệu port, đường dẫn Unix-domain socket (là trống trên môi trường Windows), giá trị hiệu lực đầu tiên chỉ định trong tham số listen_address và segment ID shared memory (tạo lúc khởi động PostgreSQL). |