[英]Unable to issue long sql query to postgres pod in kubernetes via bash script
我正在尝试通过 bash 脚本对 k8s 中的 postgres pod 执行查询,但是当我选择大量列时无法获得结果。 这是我的查询:
kubectl exec -it postgres-pod-dcd-wvd -- bash -c "psql -U postgres -c \"Select json_build_object('f_name',json_agg(f_name),'l_name',json_agg(l_name),'email',json_agg(email),'date_joined',json_agg(date_joined),'dep_name',json_agg(dep_name),'address',json_agg(address),'zip_code',json_agg(zip_code),'city',json_agg(city), 'country',json_agg(country)) from accounts WHERE last_name='ABC';\""
当我减少要在查询中选择的列数时,我会得到结果,但是如果我使用所有列名,查询就会无限期地挂起。 这里可能有什么问题?
更新:
我尝试将查询用作:
kubectl exec -it postgres-pod-dcd-wvd -- bash -c "psql -U postgres -c \"Select last_name,first_name,...(other column names).. row_to_json(accounts) from register_account WHERE last_name='ABC';\""
但这也悬而未决。
当我从 pod 内部尝试时,它可以工作,但我需要通过 bash 脚本执行它
意味着它几乎可以肯定是结果分页; 当您运行exec -t
它会在 Pod 中设置一个 TTY,就像您以交互方式连接一样,因此它可能正在等待您按空格或“n”进入下一页
您可以使用env PAGER=cat psql -c "select ..."
或使用--pset pager=off
禁用分页,如psql --pset pager=off -c "Select ..."
此外,除非您的.bashrc
正在设置一些变量或以其他方式在 Pod 中执行工作,否则无需运行bash -c
。 使用exec -- psql
应该可以正常工作,所有其他条件都相同。 如果您想使用PAGER=cat
方法,您将需要使用env
命令,因为$ ENV=var some_command
是shell 语法,因此不能直接输入exec
由于结果列有很多 json 处理,我认为执行这两个查询所花费的时间是不同的。
也许您可以登录到 pod 并执行查询并查看。
kubectl exec -it postgres-pod-dcd-wvd -- bash
现在您在吊舱内。 然后我们可以执行查询。
# psql -U postgres -c \"Select json_build_object('f_name',json_agg(f_name),'l_name',json_agg(l_name),'email',json_agg(email),'date_joined',json_agg(date_joined),'dep_name',json_agg(dep_name),'address',json_agg(address),'zip_code',json_agg(zip_code),'city',json_agg(city), 'country',json_agg(country)) from accounts WHERE last_name='ABC';\"
# psql -U postgres -c \"Select last_name,first_name,...(other column names).. row_to_json(accounts) from register_account WHERE last_name='ABC';\"
现在您将能够看到一个查询是否需要更长的时间来执行。
此外,可以使用请求超时值 ( --request-timeout=5m
) 执行kubectl exec pod
命令以查看是否存在缓慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.