使用 aws_s3 插件
功能概述
通过 aws_s3 插件,可以连接兼容 AWS S3 的对象存储,将 PostgreSQL 的数据导出到对象存储,或将对象存储的数据导入到 PostgreSQL 中。PostgreSQL 应用版本需为 v2.2.0-高可用版、v2.2.0-基础版,及以上版本。
注意事项
导入/导出均需要生成临时文件,请在 PostgreSQL 节点上预留足够的磁盘空间。
-
如果导出数据过大,无法一次性导出,可以通过
limit语句限制导出数据量。 -
如果导入数据过大,无法一次性导入,可以通过切割源文件并分批导入。
操作步骤
步骤一:安装 aws_s3 插件
步骤二:使用 aws_s3 插件
-
使用
高级权限的账号,通过高可用写 IP 连接数据库。详情参考连接数据库。 -
执行以下命令,创建测试表
animals。CREATE TABLE animals ( name TEXT, age INT ); -
执行以下命令,在表中插入测试数据。
insert into animals(name, age) values ('dog', 12), ('cat', 15), ('parrot', 103), ('tortoise', 205); -
使用
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.pek3b.qingstor.com' );回显信息示例,如下所示,表示导出成功。
rows_uploaded | files_uploaded | bytes_uploaded ---------------+----------------+---------------- 4 | 1 | 47 (1 row) -
导出成功后,可以在对象存储中查看导出的文件,文件位置为
s3://postgresql/postgres-aws-s3/14/animals-export.csv。 -
使用
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', 'pek3', access_key:='FHTHACVRUXMXRRQSELAB', secret_key:='cHyI5SiaMcdx5QMfiCJrDMUwxarVuyx5ZTcsLjab', endpoint_url:='https://s3.pek3b.qingstor.com' );回显信息示例,如下所示,表示导出成功。
table_import_from_s3 ---------------------- 4 (1 row) -
导入成功后,在数据库中执行如下命令即可查看导入的数据。
select * from animals_new;
附录
插件函数介绍
-
使用
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
可选参数,导出时是否覆盖对象存储中已有的同名文件。
-
true覆盖同名文件。 -
false默认值,不覆盖同名文件,自动新建一个文件,文件名称后自动添加_part{n}后缀。
false
tempfile_dir
可选参数,指定导出时临时文件的路径。默认为
/var/lib/postgresql/data/。/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。
-
true覆盖数据,在导入前,系统会运行TRUNCATE TABLE <table_name> RESTRICT。 -
false默认值,不覆盖数据,将导入的数据追加到已有表中。
false
tempfile_dir
可选参数,指定导出时临时文件的路径。默认为
/var/lib/postgresql/data/。/var/lib/postgresql/data/
-
-