我的PostgreSQL数据库中有一个名为“ myTable”的表,该表有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)
我想使用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方面的专家,因此我可能在这里犯了一些非常愚蠢的错误。任何帮助,将不胜感激。
答案 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