PostgreSQL - вставка в столбцы, имя которых является ключевым словом, с помощью сценария оболочки - PullRequest
0 голосов
/ 30 января 2019

У меня есть таблица с именем «myTable» в моей базе данных PostgreSQL, которая имеет 4 столбца - id, non_keyword_columnA, non_keyword_columnB и group.

Структура таблицы следующая:

 Column              |    Type    |          Modifiers                                
 --------------------+------------+------------------------------------------
 id                  | integer    | not null default nextval('myTable_id_seq'::regclass)
 non_keyword_columnA | integer    | 
 non_keyword_columnB | integer    | 
 group               | integer    | not null


 Foreign-key constraints:
    "tablename_group_fkey" FOREIGN KEY ("group") REFERENCES groups(id)

Я хочу вставить данные в эту таблицу с помощью оболочки, и я использую следующий код, чтобы сделать это:

sudo /usr/sbin/chroot environment_path_here su - username -c "psql -A -z -c \"INSERT INTO myTable (non_keyword_columnA ,non_keyword_columnB ,"group") VALUES (1,2,(SELECT id from groups WHERE name='someGroupName'));\""

Я не являюсь экспертом вБазы данных, но я понимаю, что группа - это ключевое слово, которое можно использовать в psql-запросах, если использовать его с двойными кавычками, которые я делал в приведенном выше сценарии.

Но получаю ошибку как

ERROR:  syntax error at or near "group"
LINE 1: ...RT INTO myTable(entity,machine,group) VAL...
                                      ^`

Если я вхожу в среду вручную и затем выполняю запрос psql, тогда запрос выполняется успешно, и строка вставляется, но ничего не работает через сценарий оболочки.

Я пробовал различные перестановки и комбинации, чтобы попытаться использовать их в качестве ключевого слова escape-группыиспользуя эти комбинации:

sudo /usr/sbin/chroot environment_path_here su - username -c "psql -A -z -c \"INSERT INTO myTable (non_keyword_columnA ,non_keyword_columnB ,\""group"\") VALUES (231,3355,(SELECT id from groups WHERE name='releventGroupName'));\""

sudo /usr/sbin/chroot environment_path_here su - username -c "psql -A -z -c \"INSERT INTO myTable (non_keyword_columnA ,non_keyword_columnB ,"\"group\"") VALUES (231,3355,(SELECT id from groups WHERE name='releventGroupName'));\""

Но ни одна из них до сих пор не работала.Я не эксперт в оболочке, так что, возможно, я допустил здесь какую-то действительно глупую ошибку.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 30 января 2019

Используйте здесь документ в качестве стандартного ввода для вашего psql.

(не проверено:)


#!/bin/sh

(sudo /usr/sbin/chroot environment_path_here su - username -c 'psql -A -z' ) <<OMG
        INSERT INTO myTable (non_keyword_columnA ,non_keyword_columnB ,"group")
        SELECT 1,2,id
        FROM groups
        WHERE name = 'someGroupName'
        ;
OMG 

см. Также ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...