尝试使用包含等号的路径从S3加载到Postgres RDS中时,权限被拒绝

我正尝试使用aws_s3.table_import_from_s3方法将数据从S3加载到Postgres RDS中,如下所述:Importing Data into PostgreSQL on Amazon RDS

S3中的文件路径包含等号'=',由于这个原因,我遇到以下错误:

ERROR:  HTTP 403. Permission denied. Check bucket or provided credentials as they may no longer be valid.

当用下划线“ _”等其他字符替换等号时,导入成功。

示例:

SELECT aws_s3.table_import_from_s3(
     'my_table','col1,col2','(format csv)','my_bucket','date=20191031/my_data.csv','eu-west-2'
);

引发上述错误。 (HTTP 403 ...)

而:

SELECT aws_s3.table_import_from_s3(
     'my_table','date_20191031/my_data.csv','eu-west-2'
);

成功没有问题

我应该添加到等号的转义字符吗?还有其他解决方案吗?

wc031546 回答:尝试使用包含等号的路径从S3加载到Postgres RDS中时,权限被拒绝

在使用功能Permission denied. Check bucket or provided credentials as they may no longer be valid时,我也遇到过aws_s3.table_import_from_s3的问题。

首先尝试对整个路径进行URL编码,但同时对/斜杠进行编码,这会干扰S3对象路径分隔符。因此,只有URL对除斜杠以外的所有内容进行编码。

用于URL编码的PHP示例

$path = implode('/',array_map('urlencode',explode('/',$path)));

之前-不起作用

SELECT aws_s3.table_import_from_s3(
   'TABLE_NAME','','(FORMAT csv,HEADER true)',aws_commons.create_s3_uri('BUCKET','subdirectory/2020-09-10T09:48:40.831Z-6402c3e6-86e6-4a15-8bc3-51d9eb9f08a3.csv','aws-region'),aws_commons.create_aws_credentials('***','***','')
)

工作后

SELECT aws_s3.table_import_from_s3(
   'TABLE_NAME','subdirectory/2020-09-10T09%3A48%3A40.831Z-6402c3e6-86e6-4a15-8bc3-51d9eb9f08a3.csv','')
)

理想情况下,这将由扩展为aws_commons.create_s3_uri的函数aws_s3处理。

,

我没有测试它,但是应该可以。只需使用=%3D进行编码即可。

SELECT aws_s3.table_import_from_s3(
 'my_table','col1,col2','(format csv)','my_bucket','date%3D20191031/my_data.csv','eu-west-2');
本文链接:https://www.f2er.com/3166630.html

大家都在问