У меня есть следующий скрипт, который подключается через ssh к удаленному серверу и выдает оператор SQL в своей базе данных Postgresql:
#!/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 =
Теперь, как я могу сделать успешный оператор INSERT с моей функцией db_query? Я уже пытался замаскировать значения, которые я пытался вставить несколькими способами, но ни одно из них не сработало. Я думаю, это как-то связано с комбинацией запуска команды sql через SSH и разных кавычек, которые я использую `, 'и'.