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', 'angelika.bartlett@example.com', 'Lorem ipsum dolor sit amet, 
  consectetur adipisicing elit'),
('Roger Scott', 'roger.scott@example.com', 
 'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'),
('Malia Murray', 'malia.murray@example.com', '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和外部表,此代码段可以节省几分钟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值