【问题标题】:psql cli loop through query results and use AWS clipsql cli 循环遍历查询结果并使用 AWS cli
【发布时间】:2022-01-12 22:44:02
【问题描述】:

我正在尝试重命名位于 AWS S3 存储桶中的大量文件。我正在做的是在我的 docker 容器映像中使用 psql cli。

我做了docker exec -it [dbname] bash

然后psql -c -d [dbname] select * from t1

如何访问上面 psql 查询的结果并循环访问它,以便对于每次迭代,我将使用 AWS CLI 命令操作将存储桶 A 中的对象移动和重命名为存储桶 B

E.g
//Results from query
**NAME**
George
Kim
Sam

**S3 Bucket A**
file_one.pdf
file_two.pdf
file_three.pdf

**S3 Bucket B (need to rename and move here)**
file_one_george.pdf
file_one_kim.pdf
file_one_same.pdf

我在这里看到aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>stackoverflow这样的东西

我需要运行与该帖子类似的 AWS 命令​​,但需要遍历 psql 查询结果。对此不确定,但我是否还需要为 AWS Bucket A 中的每个文件提供某种逻辑。 比如

if (file one name in bucket A == psql query result row[x] name)
  //run aws cli command to rename file and move to new bucket

【问题讨论】:

    标签: postgresql amazon-web-services amazon-s3 elixir psql


    【解决方案1】:

    您需要将查询结果写入文件。您可以使用重定向运算符> 来执行此操作。以下将运行查询并将结果放入output.txt

    psql -d [dbname] -c 'select * from t1' > output.txt
    

    即使我们将查询存储在output.txt 中,它也可能仍在您最初登录的 docker 映像上。您需要将本地目录挂载为卷以具有文件输出或将 docker 查询的输出通过管道传输到文件。例如,要在名为my_db 的数据库中获取表accounts,用户名为postgres,命令为:

    docker exec -it my_db bash -c "psql -U postgres -d my_db -c 'select * from accounts'" > output.txt
    

    您的命令可能是(尽管您可能需要更改数据库的用户名 -U postgres):

    docker exec -it [dbname] bash -c "psql -U postgres -d [dbname] -c 'select * from t1'" > output.txt
    

    然后,您可以从文件中加载查询结果以运行脚本,该脚本将使用 aws 命令重命名 S3 存储桶。

    【讨论】:

    • 感谢您的建议。对于我需要从文件加载查询结果并运行脚本的最后一部分,我是否使用 AWS cli 执行此操作?意思是 AWS cli 是否有一个实用程序来处理文件中的所有行并为它们创建一个新的名称/目标?
    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    相关资源
    最近更新 更多