Xem dữ liệu từ database PostgreSQL ở xa

Nhiều trường hợp, bạn đang kết nối vào database này và muốn xem dữ liệu ở 1 database khác.

Trong PostgreSQL có 1 chức năng hỗ trợ bạn làm điều đó. Nó gọi là Foreign data wrapper (FDW).

Cấu hình chức năng này rất đơn giản. Bài viết này sẽ giúp bạn.


   Bài toán

Giả sử bạn đang kết nối vào 1 database PostgreSQL và bạn muốn truy vấn dữ liệu từ bảng history của 1 database ở máy chủ khác.

Bảng history có cấu trúc như sau:

create table history (
        id int4 NOT NULL,
        step_name varchar(300) NULL,
        begin_time timestamp NULL,
        duration text NULL,
        message text NULL);

Các bước tiến hành sẽ như sau:


   Cài đặt Extention

Đầu tiên bạn phải cài đặt extension có tên postgres_fdw.

CREATE EXTENSION postgres_fdw;

   Tạo External Server

Sau đó, bạn tạo External Server (chính là server chứa database PostgreSQL mà bạn muốn kết nối tới)

CREATE SERVER ext_server 
FOREIGN DATA WRAPPER postgres_fdw  
OPTIONS (host '10.0.32.132', dbname 'fdw_db', port '5432');

Giải thích câu lệnh:

   Câu lệnh này sẽ tạo ra một External Server có tên ext_server (tên này tùy bạn đặt) kết nối đến máy chủ lưu trữ PostgreSQL database bạn cần kết nối.

   Ở trong phần OPTIONS:

   10.0.32.132 là IP của máy chủ chứa PostgreSQL database mà bạn muốn kết nối tới.

Đọc thêm  Xử lý thế nào khi phân vùng WAL file bị đầy

   fdw_db là tên database mà bạn muốn kết nối,

   5432 là port của PostgreSQL ở máy chủ đích.


   Tạo user mapping

Sau khi tạo xong  External Server, bạn cần tạo ra một kết nối với user ở database đích bằng câu lệnh sau:

CREATE USER MAPPING FOR CURRENT_USER
SERVER ext_server  
OPTIONS (user 'postgres', password 'Abcd_1234');

Giải thích câu lệnh: Câu lệnh này sẽ thực hiện map user đang kết nối với user postgres của database ở xa, bằng External Server đã tạo ra ở bước trước (ext_server)

Cuối cùng bạn tạo Foreign table trên database hiện hành map với table history trên database ở xa.


   Tạo Foreign Table

CREATE FOREIGN TABLE ext_history (
        id int4 NOT NULL,
        step_name varchar(300) NULL,
        begin_time timestamp NULL,
        duration text NULL,
        message text NULL)
        SERVER ext_server
        OPTIONS (schema_name 'public', table_name 'history');

Như vậy là xong rồi đó, bạn có thể kiểm tra lại bằng cách select bảng ext_history xem sao

select * from ext_history;

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