无法使用 aws_s3.query_export_to_s3 函数将 AWS RDS Postgres table 导出到 S3 中的 CSV
Unable to export AWS RDS Postgres table to CSV in S3, using aws_s3.query_export_to_s3 function
我仔细阅读了有关将 AWS RDS Postgres 表作为 CSV 导出到 S3 的文档,但仍然无法正常工作。
Documentation URL
更具体地说,在创建 aws_s3
扩展后
CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE;
我尝试执行这个函数:
SELECT * from aws_s3.query_export_to_s3('select * from users limit 10', 'sample-s3-bucket', '/users_demo.csv');
因以下错误而失败:
[42883] ERROR: function aws_s3.query_export_to_s3(unknown, unknown,
unknown) does not exist Hint: No function matches the given name and
argument types. You might need to add explicit type casts.
此错误未记录(或者我找不到相关文档)。似乎 aws_s3.query_export_to_s3
函数实际上在扩展中丢失了!
我试图查看这个函数 aws_s3.query_export_to_s3
是否确实缺失。我已经试过了:
- 列出可用的扩展显示
aws_s3
已安装的 esxtension:
SELECT * FROM pg_available_extensions where name like '%aw%';
结果:
name | default_version | installed_version | comment
-------------+-----------------+-------------------+---------------------------------------------
aws_s3 | 1.0 | 1.0 | AWS S3 extension for importing data from S3
aws_commons | 1.0 | 1.0 | Common data types across AWS services
(2 rows)
- 列出扩展函数不显示
query_export_to_s3
函数:
SELECT e.extname, ne.nspname AS extschema, p.proname, np.nspname AS proschema
FROM pg_catalog.pg_extension AS e
INNER JOIN pg_catalog.pg_depend AS d ON (d.refobjid = e.oid)
INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
INNER JOIN pg_catalog.pg_namespace AS ne ON (ne.oid = e.extnamespace)
INNER JOIN pg_catalog.pg_namespace AS np ON (np.oid = p.pronamespace)
WHERE d.deptype = 'e' AND e.extname like '%aws%'
ORDER BY 1, 3;
结果:
extname | extschema | proname | proschema
-------------+-----------+------------------------+-------------
aws_commons | public | create_aws_credentials | aws_commons
aws_commons | public | create_s3_uri | aws_commons
aws_s3 | public | table_import_from_s3 | aws_s3
aws_s3 | public | table_import_from_s3 | aws_s3
(4 rows)
- 最后,删除并重新创建扩展 aws_s3 没有成功。
更多信息:PostgreSQL 12.3 on x86_64-pc-linux-gnu
。
任何人都可以确认这个功能实际上是缺失的吗?换句话说,任何人都可以使用这个功能吗?
尝试升级到 Postgres 12.4。我遇到了类似的问题,这就是 AWS 支持人员告诉我的(下面粘贴了回复)。 [已编辑]
更新
最初我没有完全做到这一点,但可以确认升级到 Postgres 12.4,删除并重新创建扩展有效。
DROP EXTENSION aws_s3 CASCADE;
DROP EXTENSION aws_commons CASCADE;
CREATE EXTENSION aws_s3 CASCADE;
AWS Support 的原始回复:
根据 describe-db-engine-versions[1] 的输出,我只能看到
以下特定引擎版本支持 s3Export 功能。因此
版本 12.2 不支持导出到 S3 功能。
[
{
"Engine": "postgres",
"EngineVersion": "10.14",
"SupportedFeatureNames": [
"s3Import",
"s3Export"
]
},
{
"Engine": "postgres",
"EngineVersion": "11.9",
"SupportedFeatureNames": [
"s3Import",
"s3Export"
]
},
{
"Engine": "postgres",
"EngineVersion": "12.4",
"SupportedFeatureNames": [
"s3Import",
"s3Export"
]
} ]
将 RDS 实例升级到 12.4 并执行以下对我有用。
DROP EXTENSION aws_s3;
DROP EXTENSION aws_commons;
CREATE EXTENSION aws_s3 CASCADE;
我仔细阅读了有关将 AWS RDS Postgres 表作为 CSV 导出到 S3 的文档,但仍然无法正常工作。 Documentation URL
更具体地说,在创建 aws_s3
扩展后
CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE;
我尝试执行这个函数:
SELECT * from aws_s3.query_export_to_s3('select * from users limit 10', 'sample-s3-bucket', '/users_demo.csv');
因以下错误而失败:
[42883] ERROR: function aws_s3.query_export_to_s3(unknown, unknown, unknown) does not exist Hint: No function matches the given name and argument types. You might need to add explicit type casts.
此错误未记录(或者我找不到相关文档)。似乎 aws_s3.query_export_to_s3
函数实际上在扩展中丢失了!
我试图查看这个函数 aws_s3.query_export_to_s3
是否确实缺失。我已经试过了:
- 列出可用的扩展显示
aws_s3
已安装的 esxtension:
SELECT * FROM pg_available_extensions where name like '%aw%';
结果:
name | default_version | installed_version | comment
-------------+-----------------+-------------------+---------------------------------------------
aws_s3 | 1.0 | 1.0 | AWS S3 extension for importing data from S3
aws_commons | 1.0 | 1.0 | Common data types across AWS services
(2 rows)
- 列出扩展函数不显示
query_export_to_s3
函数:
SELECT e.extname, ne.nspname AS extschema, p.proname, np.nspname AS proschema
FROM pg_catalog.pg_extension AS e
INNER JOIN pg_catalog.pg_depend AS d ON (d.refobjid = e.oid)
INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
INNER JOIN pg_catalog.pg_namespace AS ne ON (ne.oid = e.extnamespace)
INNER JOIN pg_catalog.pg_namespace AS np ON (np.oid = p.pronamespace)
WHERE d.deptype = 'e' AND e.extname like '%aws%'
ORDER BY 1, 3;
结果:
extname | extschema | proname | proschema
-------------+-----------+------------------------+-------------
aws_commons | public | create_aws_credentials | aws_commons
aws_commons | public | create_s3_uri | aws_commons
aws_s3 | public | table_import_from_s3 | aws_s3
aws_s3 | public | table_import_from_s3 | aws_s3
(4 rows)
- 最后,删除并重新创建扩展 aws_s3 没有成功。
更多信息:PostgreSQL 12.3 on x86_64-pc-linux-gnu
。
任何人都可以确认这个功能实际上是缺失的吗?换句话说,任何人都可以使用这个功能吗?
尝试升级到 Postgres 12.4。我遇到了类似的问题,这就是 AWS 支持人员告诉我的(下面粘贴了回复)。 [已编辑]
更新
最初我没有完全做到这一点,但可以确认升级到 Postgres 12.4,删除并重新创建扩展有效。
DROP EXTENSION aws_s3 CASCADE;
DROP EXTENSION aws_commons CASCADE;
CREATE EXTENSION aws_s3 CASCADE;
AWS Support 的原始回复:
根据 describe-db-engine-versions[1] 的输出,我只能看到 以下特定引擎版本支持 s3Export 功能。因此 版本 12.2 不支持导出到 S3 功能。
[
{
"Engine": "postgres",
"EngineVersion": "10.14",
"SupportedFeatureNames": [
"s3Import",
"s3Export"
]
},
{
"Engine": "postgres",
"EngineVersion": "11.9",
"SupportedFeatureNames": [
"s3Import",
"s3Export"
]
},
{
"Engine": "postgres",
"EngineVersion": "12.4",
"SupportedFeatureNames": [
"s3Import",
"s3Export"
]
} ]
将 RDS 实例升级到 12.4 并执行以下对我有用。
DROP EXTENSION aws_s3;
DROP EXTENSION aws_commons;
CREATE EXTENSION aws_s3 CASCADE;