Tablespace được thiết kế để cho phép các PostgreSQL Database Cluster được trải rộng trên nhiều thiết bị lưu trữ.

Nếu bạn muốn tìm hiểu kỹ hơn về tablespace, xin mời đọc bài này trước:

Đọc thêm  Quản lý tablespace trong PostgreSQL

  Giả sử tình huống: Tablespace của các bạn đang đặt tại 1 thư mục trên 1 đĩa, mà đĩa này sắp bị đầy rồi.

Bạn cần phải di chuyển thư mục này sang 1 đĩa khác lớn hơn.

Trong bài viết này, tôi sẽ hướng dẫn các bạn thực hiện điều đó.


   Kiểm tra

Giả sử tôi có một tablespace tên là data2019 với đường dẫn đặt tại /var/lib/pgsql/13/data2019.

postgres=# \db
                List of tablespaces
    Name    |  Owner   |          Location          
------------+----------+----------------------------
 data2019   | postgres | /var/lib/pgsql/13/data2019
 pg_default | postgres | 
 pg_global  | postgres | 
 tbs_index  | postgres | /data/tbs_index
 tbs_index2 | postgres | /data/tbs_index2
(5 rows)

Bây giờ tình huống là đĩa cứng để lưu trữ thư mục này đã gần hết rồi. Tôi có 1 thư mục đặt trên một đĩa khác, có tên là /data. Và tôi cần chuyển tablespace data2019 sang đây.


   Tìm hiểu một chút về lý thuyết đã

Khi bạn tạo 1 tablespace với 1 thư mục tương ứng, PostgreSQL cũng sẽ tạo ra một link trong thư mục pg_tblspc trong data directory, trỏ đến thư mục tablespace mới được tạo.

Mặc dù có tồn tại câu lệnh di chuyển table và index sang các tablepace, nhưng không có câu lệnh nào để di chuyển tablespace sang thư mục khác. Tuy nhiên, dựa trên lý thuyết bên trên, cách di chuyển tablespace sang thư mục khác cũng khá đơn giản:

Chỉ cần move tablespace sang thư mục mới và cập nhật lại link của tablespace trỏ sang thư mục mới là được.

Đọc thêm  Ý nghĩa các thư mục trong PostgreSQL

   Các bước làm:

   Kiểm tra object id (OID) của tablespace

Giả sử database cluster của bạn có rất nhiều tablespace, nếu bạn cập nhật nhầm link thì rất tai hại. Do đó chúng ta cần kiểm tra kỹ OID của tablespace để cập nhật cho chuẩn (Vì tên của đường link cũng chính là OID)

Câu lệnh để kiểm tra ODI của tablespace

postgres=# SELECT oid, * FROM pg_tablespace;
  oid  |  oid  |  spcname   | spcowner | spcacl | spcoptions 
-------+-------+------------+----------+--------+------------
  1663 |  1663 | pg_default |       10 |        | 
  1664 |  1664 | pg_global  |       10 |        | 
 25403 | 25403 | tbs_index  |       10 |        | 
 25404 | 25404 | tbs_index2 |       10 |        | 
 55299 | 55299 | data2019   |       10 |        |

ở đây, 55299 là OID của tablespace data2019, và cũng là tên của link trong thư mục pg_tblspc.

   Di chuyển thư mục tablespace

Thư mục lưu trữ dữ liệu thực sự của tablespace là /var/lib/pgsql/13/data2019, giờ chúng ta sẽ chuyển nó sang /data nhé

Trước tiên bạn cần phải stop PostgreSQL đi

pg_ctl stop
waiting for server to shut down.... done
server stopped

Di chuyển thư mục /var/lib/pgsql/13/data2019 sang /data

mv /var/lib/pgsql/13/data2019 /data/

   Cập nhật lại link

cd $PGDATA/pg_tblspc

Bạn sẽ thấy hiện tại link đang bị lỗi do thư mục đã bị chuyển sang vị trí khác, bạn cần cập nhật lại link trỏ sang vị trí mới bằng lệnh sau:

ln -fs /data/data2019/ 55299

với /data/data2019 là đường dẫn mới

    Cuối cùng, Khởi động lại PostgreSQL

pg_ctl start
waiting for server to start....2021-05-21 04:28:11.728 UTC [20163] LOG:  redirecting log output to logging collector process
2021-05-21 04:28:11.728 UTC [20163] HINT:  Future log output will appear in directory "log".
 done
server started

   Kiểm tra lại

Bây giờ bạn kết nối vào psql, thử kiểm tra lại xem nhé

-bash-4.2$ psql 
psql (13.2)
Type "help" for help.

postgres=# \db
           List of tablespaces
    Name    |  Owner   |     Location     
------------+----------+------------------
 data2019   | postgres | /data/data2019/
 pg_default | postgres | 
 pg_global  | postgres | 
 tbs_index  | postgres | /data/tbs_index
 tbs_index2 | postgres | /data/tbs_index2
(5 rows)

Như vậy chúng ta đã di chuyển tablespace sang thư mục mới thành công.

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments