bash - Postgres 命令行语句 : INSERT complains about non-existing column

标签 bash postgresql

我有以下脚本,它通过 ssh 连接到远程服务器并在其 Postgresql 数据库上发出 SQL 语句:

#!/bin/bash
db_query() {
    app_server="$1"
    sql_stmt="$2"
    psql_cmd="psql -d vdc --pset tuples_only -c '$sql_stmt'"
    rows_count=`ssh $app_server "sudo su - postgres -c \"$psql_cmd\""`

    echo "DB_QUERY: rows_count = $rows_count"
}

现在我尝试对下表发出 SELECT 和 INSERT 语句:

CREATE TABLE pb_properties
(
  c_name character varying(255) NOT NULL,
  c_value character varying(255),
  CONSTRAINT pb_properties_pkey PRIMARY KEY (c_name)
)

如果我执行 SELECT 语句,此函数可以正常工作:

#!/bin/bash
source db_query.sh
db_query staging "SELECT * FROM pb_properties;"

>> Output: DB_QUERY: rows_count =  support-email | test@test.com

但如果我执行 INSERT 语句,它就不起作用:

#!/bin/bash
source db_query.sh
db_query prestaging "INSERT INTO pb_properties (c_name, c_value) VALUES ('support-email', 'test@test.com');"

>> Output:
>>ERROR:  column "testname" does not exist
>>LINE 1: ...SERT INTO pb_properties (c_name, c_value) VALUES (testname, ...
                                                             ^
>>DB_QUERY: rows_count =

现在如何使用 db_query 函数执行成功的 INSERT 语句?我已经尝试过以多种方式屏蔽我试图插入的值,但它们都不起作用。我想这与通过 SSH 运行 sql 命令的组合以及我使用的不同引号 `、"和 ' 有关。

最佳答案

这是一个代码示例,您可以使用它来消除对 tmp 文件的依赖:

echo "$sql_stmt" | ssh $app_server "sudo su - postgres -c '/usr/local/pgsql/bin/psql -A -t -U postgres $database'"

关于bash - Postgres 命令行语句 : INSERT complains about non-existing column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6070515/

相关文章:

python csv 到嵌套列表,计数器

mysql - 连接2个表的SQL查询

sql - 如果我使用 TEXT 数据类型存储数字会有任何不良影响

django - 在 Django 数据迁移中手动提交

sql - 如何在 Hibernate 中使用数组字段创建条件

postgresql - java.lang.ClassNotFoundException : org. postgresql.Driver postgresql ubuntu 问题

linux - 如何评估 bash shell 中的给定路径

python - bash 在继续之前等待第一个 python 文件启动

linux - Makefile 中的源环境变量文件

java - 无法从 Java 程序执行 R 脚本?