Postgres外部表示例

目錄

介紹

背景

環境配置

數據庫設置

全部放在一起

遠程服務器腳本(postgres_2)

本地服務器腳本(postgres_1)

結論


介紹

我已經與Postgres一起工作了10多年,我必須說我對它的性能、可靠性和使開發人員的生活更輕鬆的特性非常滿意。

我喜歡的這些功能之一是對Foreign table的支持,這是一個非常有用的功能,幾年前我在網上發現它的。

背景

Postgres官方文檔描述瞭如何創建外部表,但是沒有顯示如何逐步進行工作,因此我決定在此處撰寫此文章。

環境配置

對於此示例,我們需要兩個Postgres服務器。我將使用Docker在我的PC中創建它們,以便在完成本文後可以輕鬆擺脫它們。

由於我假設您已經擁有服務器,因此此步驟是完全可選的,但是如果您好奇並從未使用過該服務器,請隨時訪問此處此處。

您應該能夠使用終端和這兩個命令來創建服務器,分別如下。

docker run --name postgres_1 -e POSTGRES_PASSWORD=postgres_1_pw -d postgres
docker run --name postgres_2 -e POSTGRES_PASSWORD=postgres_2_pw -d postgres

您知道如果運行docker ps一切都會順利,並且會看到類似以下內容的信息:

CONTAINER ID  IMAGE     COMMAND                CREATED       STATUS        PORTS     NAMES
65b706348544  postgres  "docker-entrypoint.s…" 2 minutes ago Up 2 minutes  5432/tcp  postgres_2
16b1dcfd09fb  postgres  "docker-entrypoint.s…" 3 minutes ago Up 3 minutes  5432/tcp  postgres_1

數據庫設置

在開始使用外部表之前,在以下所示的兩臺服務器中都需要一個非常基本的結構:

完成此操作後,我們將需要一個示例表users,其中包含位於postgres_2中的database_2上的一些隨機數據。

要從服務器1postgres_1)讀取和寫入users表,我們需要使用postgres_fdw擴展名,該擴展名將允許我們訪問遠程表中的數據,創建數據的原始源,當然,我們將需要一些憑據才能訪問數據在遠程服務器上。

一旦從postgres_2導入了users表到postgres_1,該users表應該可以以讀或寫操作進行訪問。

全部放在一起

遠程服務器腳本(postgres_2

CREATE TABLE users
(
    id serial primary key,
    name character varying NOT NULL,
    email character varying NOT NULL UNIQUE,
    bio text
);

INSERT INTO users (name, email, bio) VALUES
('Angelika Bartlett', '[email protected]', 'Lorem ipsum dolor sit amet, 
  consectetur adipisicing elit'),
('Roger Scott', '[email protected]', 
 'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'),
('Malia Murray', '[email protected]', 'Ut enim ad minim veniam, 
  quis nostrud exercitation ullamco laboris');

本地服務器腳本(postgres_1

CREATE EXTENSION postgres_fdw;

CREATE SERVER postgres_2
 FOREIGN DATA WRAPPER postgres_fdw
 OPTIONS (dbname 'database_2', host 'postgres_2', port '5432');

CREATE USER MAPPING FOR CURRENT_USER
  SERVER postgres_2
  OPTIONS (user 'postgres', password 'postgres_2_pw');

IMPORT FOREIGN SCHEMA "public" limit to (users) FROM SERVER postgres_2 INTO public;

SELECT *
FROM users;

UPDATE users
SET name = 'Ing. Malia Murray'
WHERE id = 3;

DELETE
FROM users
WHERE id = 3;

結論

我希望如果您需要使用Postgres和外部表,此代碼段可以節省幾分鐘。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章