PostgreSQL-使用Shell脚本插入名称为关键字的列中

时间:2019-01-30 10:16:21

标签: linux postgresql shell psql

我的PostgreSQL数据库中有一个名为“ myTable”的表,该表有4列-idnon_keyword_columnAnon_keyword_columnBgroup

表的结构如下:

 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)

我想使用shell将数据插入此表中,并且我正在使用以下代码来做到这一点:

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'));\""

我不是数据库专家,但是我知道group是一个关键字,如果与上述脚本中的双引号一起使用,则可以在psql查询中使用。

但是收到错误消息

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

如果我手动进入环境,然后执行psql查询,则查询成功执行,并且插入了行,但是通过shell脚本没有任何作用。

我尝试了各种组合和组合,尝试使用以下组合作为转义组关键字:

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'));\""

但是到目前为止,他们都还没有工作。我也不是shell方面的专家,因此我可能在这里犯了一些非常愚蠢的错误。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用此处文档作为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 

see also...