dva*_*rub 5 postgresql amazon-s3 amazon-rds
我正在尝试使用如下所述的方法将数据从 S3 加载到 Postgres RDS aws_s3.table_import_from_s3:将数据导入 Amazon RDS 上的 PostgreSQL
S3 中的文件路径包含等号“=”,因此我收到以下错误:
ERROR: HTTP 403. Permission denied. Check bucket or provided credentials as they may no longer be valid.
Run Code Online (Sandbox Code Playgroud)
将等号替换为下划线“_”等其他字符时,导入成功。
例子:
ERROR: HTTP 403. Permission denied. Check bucket or provided credentials as they may no longer be valid.
Run Code Online (Sandbox Code Playgroud)
抛出上面提到的错误。(HTTP 403...)
尽管:
SELECT aws_s3.table_import_from_s3(
'my_table',
'col1,col2',
'(format csv)',
'my_bucket',
'date=20191031/my_data.csv',
'eu-west-2'
);
Run Code Online (Sandbox Code Playgroud)
成功没有任何问题
我应该在等号上添加任何转义字符吗?还有其他解决办法吗?
我没有测试它,但应该工作。只需=使用%3D.
SELECT aws_s3.table_import_from_s3(
'my_table',
'col1,col2',
'(format csv)',
'my_bucket',
'date%3D20191031/my_data.csv',
'eu-west-2');
Run Code Online (Sandbox Code Playgroud)
我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)));
Run Code Online (Sandbox Code Playgroud)
之前 - 不工作
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('***', '***', '')
)
Run Code Online (Sandbox Code Playgroud)
下班后
SELECT aws_s3.table_import_from_s3(
'TABLE_NAME',
'',
'(FORMAT csv, HEADER true)',
aws_commons.create_s3_uri('BUCKET', 'subdirectory/2020-09-10T09%3A48%3A40.831Z-6402c3e6-86e6-4a15-8bc3-51d9eb9f08a3.csv', 'aws-region'),
aws_commons.create_aws_credentials('***', '***', '')
)
Run Code Online (Sandbox Code Playgroud)
理想情况下,这将由扩展aws_commons.create_s3_uri提供的功能处理aws_s3。
| 归档时间: |
|
| 查看次数: |
2241 次 |
| 最近记录: |