使用 aws_s3 插件
通过 aws_s3 插件,可以连接兼容 AWS S3 的对象存储,将 PostgreSQL 的数据导出到对象存储,或将对象存储的数据导入到 PostgreSQL 中。
约束限制
PostgreSQL 应用版本为 V2.2.0-高可用版、V2.2.0-基础版,及以上版本。
注意事项
导入/导出均需要生成临时文件,请在 PostgreSQL 节点上预留足够的磁盘空间。
-
如果导出数据过大,无法一次性导出,可以通过 limit 语句限制导出数据量。
-
如果导入数据过大,无法一次性导入,可以通过切割源文件并分批导入。
安装 aws_s3 插件
插件函数介绍
query_export_to_s3
该函数用于导出 PostgreSQL 数据到 S3 对象存储。
函数的所有参数语法如下:
aws_s3.query_export_to_s3(
query text,
bucket text,
file_path text,
region text default null,
access_key text default null,
secret_key text default null,
session_token text default null,
options text default null,
endpoint_url text default null,
read_timeout integer default 60,
override boolean default false,
tempfile_dir text default '/var/lib/postgresql/data/',
)
参数说明:
参数 | 说明 | 示例 |
---|---|---|
query |
查询需要导出的数据。 |
select * from animals。 |
bucket |
对象存储的 Bucket 名称。 |
postgresql |
file_path |
导出文件在对象存储中的文件名称及路径。 |
postgres-aws-s3/14/animals-export.csv |
region |
对象存储桶所在的区域。 |
- |
access_key |
访问对象存储的 Access Key ID。 |
- |
secret_key |
访问对象存储的 Secret Access Key。 |
- |
session_token |
可选参数,会话令牌。 |
- |
options |
传递给 PostgreSQL 中的 COPY 命令的选项。 |
FORMAT CSV, HEADER true |
endpoint_url |
对象存储的 Endpoint 地址。 |
http://localhost:4566 |
read_timeout |
可选参数,配置导出超时时间,从读取 PostgreSQL 数据时开始计算。单位为妙,默认值为 60 秒。 |
60 |
override |
可选参数,导出时是否覆盖对象存储中已有的同名文件。默认值为 false。
|
false |
tempfile_dir |
可选参数,指定导出时临时文件的路径。默认为 |
/var/lib/postgresql/data/ |
table_import_from_s3
该函数用于从 S3 对象存储导入数据到 PostgreSQL 数据库。
函数所有参数语法如下:
aws_s3.table_import_from_s3 (
table_name text,
column_list text,
options text,
bucket text,
file_path text,
region text,
access_key text,
secret_key text,
session_token text,
endpoint_url text default null,
read_timeout integer default 60,
override boolean default false,
tempfile_dir text default '/var/lib/postgresql/data/'
)
参数说明:
参数 | 说明 | 示例 |
---|---|---|
table_name |
导入数据到 PostgreSQL 数据库后的表名称。数据库表需要提前创建。 |
animals |
column_list |
要复制的列。 |
name,age |
options |
传递给 Postgres 中的 COPY 命令的选项。 |
(FORMAT CSV, DELIMITER '','', HEADER true) |
bucket |
对象存储的 Bucket 名称。 |
postgresql |
file_path |
对象存储的文件路径。 支持多文件或路径下所有文件导入,以 "," 作为分隔符。 |
postgres-aws-s3/14/animals-export.csv |
region |
对象存储桶所在的区域。 |
- |
access_key |
访问对象存储的 Access Key ID。 |
- |
secret_key |
访问对象存储的 Secret Access Key。 |
- |
session_token |
可选参数,会话令牌。 |
- |
endpoint_url |
对象存储的 Endpoint 地址。 |
http://localhost:4566 |
read_timeout |
可选参数,配置导入超时时间。单位为妙,默认值为 60 秒。 |
60 |
override |
可选参数,导入时是否覆盖表中已有的数据。默认值为 false。
|
false |
tempfile_dir |
可选参数,指定导出时临时文件的路径。默认为 |
/var/lib/postgresql/data/ |
使用示例
创建测试表
-
使用高级权限账号,通过高可用写 IP 连接数据库。
-
执行以下命令,创建测试表
animals
。CREATE TABLE animals ( name TEXT, age INT );
-
执行以下命令,在表中插入测试数据。
insert into animals(name, age) values ('dog', 12), ('cat', 15), ('parrot', 103), ('tortoise', 205);
导出 PostgreSQL 数据到 S3
以下示例表示,使用 query_export_to_s3
函数将测试表 animals
中的所有数据导出到所配置的对象存储桶 postgresql
中,导出文件名为 animals-export.csv
。
SELECT * FROM aws_s3.query_export_to_s3(
'select * from animals',
'postgresql',
'postgres-aws-s3/14/animals-export.csv',
access_key:='FHTHACVRUXMXRRQSELAB',
secret_key:='cHyI5SiaMcdx5QMfiCJrDMUwxarVuyx5ZTcsLjab',
options:='FORMAT CSV, HEADER true',
endpoint_url:='https://s3.jn1.is.shanhe.com'
);
回显信息如下,表示导出成功。
rows_uploaded | files_uploaded | bytes_uploaded
---------------+----------------+----------------
4 | 1 | 47
(1 row)
导出成功后,可以在对象存储中查看导出的文件,文件位置为 s3://postgresql/postgres-aws-s3/14/animals-export.csv
。
从 S3 导入数据到 PostgreSQL
以下示例表示,使用 table_import_from_s3
函数将对象存储桶 postgresql
中的文件 animals-export.csv
导入到 PostgreSQL 的表 animals
中。
SELECT aws_s3.table_import_from_s3 (
'animals',
'name,age',
'(FORMAT CSV, DELIMITER '','', HEADER true)',
'postgresql',
'postgres-aws-s3/14/animals-export.csv',
'jn1',
access_key:='FHTHACVRUXMXRRQSELAB',
secret_key:='cHyI5SiaMcdx5QMfiCJrDMUwxarVuyx5ZTcsLjab',
endpoint_url:='https://s3.jn1.is.shanhe.com'
);
回显信息如下,表示导入成功。
table_import_from_s3
----------------------
4
(1 row)
导入成功后,在数据库中执行如下命令即可查看导入的数据。
select * from animals_new;