bash - 使用 kubectl 通过 bash 脚本在 postgres 中插入 json
问题描述
我正在尝试使用 bash 脚本更新我的一个表中的字段。我正在尝试在 postgress 的该字段中插入 json 值。字段类型为“文本”。这是我尝试执行的查询:
TOKEN="${ENV_TOKEN}"
kubectl exec -it postgres-d5b5794-7fxxm -n eclipse-che -- bash -c "psql keycloak -c UPDATE federated_identity SET token ={"access_token":"'$TOKEN'","expires_in":86400,"scope":"user:full","token_type":"Bearer"} WHERE federated_username = 'admin'"
执行此代码后,我收到以下错误:
psql: warning: extra command-line argument "SET" ignored
psql: warning: extra command-line argument "token" ignored
psql: warning: extra command-line argument "=access_token:sha256~g1KaHT3-RSa2G1oPfDboc7jI90OLy67VQ4mJsVjFYZw" ignored
psql: warning: extra command-line argument "=expires_in:86400" ignored
psql: warning: extra command-line argument "=scope:user:full" ignored
psql: warning: extra command-line argument "=token_type:Bearer" ignored
psql: warning: extra command-line argument "WHERE" ignored
psql: warning: extra command-line argument "federated_username" ignored
psql: warning: extra command-line argument "=" ignored
psql: warning: extra command-line argument "admin" ignored
psql: FATAL: role "federated_identity" does not exist
command terminated with exit code 2
我已经尝试了一切来避免引号,但没有任何效果......
有人可以帮我完成这个查询吗?
解决方案
我没有尝试添加 JSON 对象,但这里是使用 kubectl 进行 CREATE 和 INSERT 的工作语法。最好的方法是将您的 SQL 语句放在文件中,以避免确保双引号/单引号被正确转义或不正确转义的痛苦。转义引号变得非常复杂,只有很少的值。我的建议是在所有 SQL 语句中使用 *.sql 文件。
使用 kubectl 执行 SQL 文件
kubectl exec -i <pod-name> -- bash -c "psql -U postgres -f /tmp/create.sql"
创建表
kubectl exec -i <pod-name> -- bash -c "psql -U postgres -c \"CREATE TABLE account1 (user_id INT PRIMARY KEY, username VARCHAR(50) NOT NULL, Password VARCHAR(50) NOT NULL, email VARCHAR(255) NOT NULL);\""
向表中插入记录
kubectl exec -i <pod-name> -- bash -c "psql -U postgres -c \"INSERT INTO account1 VALUES (1, 'dummyuser', 'dummypassword', 'dummy@gmail.com');\""
推荐阅读
- keras - Keras softmax 层返回 one-hot 编码数组
- angular - 如何在不丢失活跃订阅者的情况下更新 Observable?
- javascript - HTML IFrame 不允许下载文件
- arrays - Spring Annotations - 使用数组属性配置
- java - Java 概念 后期版格式化部分
- javascript - 将字符串数组转换为一个对象,其中最内层的子对象是 JavaScript/Typescript 中的空数组
- nunjucks - NUNJUCKS 设置变量
- android - Android RecyclerView 如何制作自定义插入动画?
- android - 如何使用 XML 设计此布局?
- windows - 致命:无法获得凭证存储锁:权限被拒绝