1. 程式人生 > >PostgreSQL的目錄結構及修改數據目錄

PostgreSQL的目錄結構及修改數據目錄

roo mit itdb rect pgsql srv repl 轉移 slot

initdb 的時候會指定一個 PGDATA 目錄,這就是 PostgresQL 存儲數據的地方,比如:/var/lib/pgsql/10/data。
======顯示數據目錄
1. 進入psql
sudo -u postgres psql
2. 找到數據目錄
postgres=# SHOW data_directory;
data_directory
------------------------
/var/lib/pgsql/10/data
(1 row)

======PGDATA 下面各項存儲的內容大概是:
文件 存儲內容
PG_VERSION 實例的 版本號
postgresql.conf 主配置文件
postgresql.auto.conf (新功能,優先級更高)
pg_hba.conf 認證配置文件
pg_ident.conf 映射配置文件
postmaster.opts /usr/pgsql-10/bin/postgres "-D" "/var/lib/pgsql/10/data/"
postmaster.pid
...

目錄名: 存儲內容
base: 默認表空間目錄,建立的表格儲存在此目錄中.每個 database 會在 base 目錄下有一個子目錄
global: 一些共享系統表的目錄.Postgres 自己的 meta 數據庫存放的地方(全局 DB)
pg_stat_tmp: 統計信息的存儲目錄
pg_tblsp: 存儲了指向各個用戶自建表空間實際目錄的鏈接方式
pg_twophase: 使用兩階段提交功能時分布式事務的存儲目錄
==以下目錄功能待補充...
log
pg_commit_ts
pg_dynshmem
pg_logical
pg_multixact
pg_notify
pg_replslot
pg_serial
pg_snapshots
pg_stat
pg_subtrans
pg_wal
pg_xact

以下目錄應該是10.0以前版本的
pg_clog: commit log的目錄
pg_log:系統日誌目錄,在查詢一些系統錯誤時就可查看此目錄下的日誌文件
pg_xlog:wal(Write Ahead Log 預寫式日誌)日誌的目錄

base 目錄是最重要的一個目錄,放的是每一個 database 的數據。
base 目錄裏的每一個數字目錄對於一個 database 的 oid,可以通過 查看 pg_database 這張表查看每一個 數據庫的 oid 。
[root@srv]# ls /var/lib/pgsql/10/data/base
1 13805 13806
postgres=# select oid, datname from pg_database ;
oid | datname
-------+-----------
13806 | postgres
1 | template1
13805 | template0
(3 rows)

每一張表的數據(大部分)又是放在 base/(dboid)/(relfilenode) 這個文件裏面:
postgres=# select relname, relowner, relfilenode from pg_class where relowner = 13805;
relname | relowner | relfilenode
---------+----------+-------------
(0 rows)

查詢‘item‘表的數據文件.這裏的‘item‘是table名稱.
lai=# select pg_relation_filepath(‘item‘);
pg_relation_filepath
----------------------
base/16385/24595
(1 row)

======PG安裝目錄,postgresql默認在/usr/pgsql-10
子目錄有:
(1)/usr/pgsql-10/bin: 二進制可執行文件目錄,此目錄下有postgres,psql等可執行程序.
(2)/usr/pgsql-10/lib: 動態庫目錄,PG程序運行需要的動態庫都在此目錄下,如libpg.so.
(3)/usr/pgsql-10/share: 此目錄下存放有文檔和配置模板文件,一些擴展包的sql文件,在此目錄的子目錄extension下.

-----------
修改data_directory的所有者,目錄權限
chown -R postgres:postgres /home/pgdata
chmod 700 /home/pgdata
--------
======修改數據目錄
1. 進入psql
sudo -u postgres psql
2. 找到數據目錄
SHOW data_directory;
3. 關閉數據庫
sudo systemctl stop postgresql
sudo systemctl status postgresql
4. 我們將現有的數據庫目錄復制到新的位置用rsync。
>> 使用-a標誌保留的權限和其他目錄屬性, 能避免未來的升級權限問題.
>> 而-v提供詳細輸出,以便能夠按照進度。
註意:確保沒有對目錄沒有尾隨斜線,如果你使用制表符完成可以加入。
當有一個結尾的斜線, rsync將轉儲目錄復制到安裝點,而不是轉移成一個包含內容PostgreSQL目錄:
sudo rsync -av /var/lib/postgresql /mnt/newdir
5. 復制完成後,我們將使用.bak擴展名重命名當前文件夾,並保留該文件,直到我們確認移動已成功。 通過重命名它,我們將避免可能由於新的和舊的位置中的文件引起的混亂:
sudo mv /var/lib/postgresql/10/data /var/lib/postgresql/10/data.bak
6. 修改配置文件:postgresql.conf
data_directory = ‘/mnt/newdir/postgresql/10/data‘
7. 啟動數據庫
sudo systemctl start postgresql
sudo systemctl status postgresql
8. 顯示數據目錄
sudo -u postgres psql
SHOW data_directory;
9. 刪除備份
sudo rm -Rf /var/lib/postgresql/9.5/main.bak
10.重啟
sudo systemctl restart postgresql
sudo systemctl status postgresql

==================
移動PostgreSQL的數據目錄移到新位置
https://www.howtoing.com/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-16-04

PG安裝目錄
https://blog.csdn.net/liguangxianbin/article/details/79563881
Postgres 數據表文件存儲位置
https://blog.csdn.net/jameshadoop/article/details/60962451
http://veryr.com/posts/postgres-storage-location/

PostgreSQL的目錄結構及修改數據目錄