我尝试在postgres帐户下通过psql执行sql。我能运行sql 不包含引号
root@server:/home/rosta/SCRIPTS# su postgres -c "psql -c 'SELECT NOW()'"
now
-------------------------------
2014-06-07 09:38:17.120368+02
(1 row)
包含SELECT'hi'等引号的sql查询出现问题。我测试 简单的'hi',但我想从shell脚本执行类似的操作。
su postgres -c "psql -c 'create database $DB_NAME template=template0 encoding='utf8' owner=aaa lc_collate='cs_CZ.utf8''"
任何人都可以告诉我如何在上面的命令中绕过编码和整理的引号
由于
罗斯塔
root@server:/home/rosta/SCRIPTS# su postgres -c "psql -c 'SELECT \'hi\''"
bash: -c: line 0: unexpected EOF while looking for matching `''
bash: -c: line 1: syntax error: unexpected end of file
root@server:/home/rosta/SCRIPTS# su postgres -c "psql -c 'SELECT \\'hi\\''"
bash: -c: line 0: unexpected EOF while looking for matching `''
bash: -c: line 1: syntax error: unexpected end of file
root@server:/home/rosta/SCRIPTS# su postgres -c 'psql -c \'SELECT \\'hi\\'\''
答案 0 :(得分:4)
最简单的方法是使用' here here' ,忽略所有引用:
#!/bin/sh
DB_NAME=my_data_base
psql -U postgres postgres <<STOP_IT
create database $DB_NAME template=template0
encoding='utf8'
owner=aaa
lc_collate='cs_CZ.utf8'
;
STOP_IT
答案 1 :(得分:3)
我通常使用双引号("
)表示postgres -c
的参数,并使用双引号(\"
)表示psql -c
的参数。这样,我可以在SQL字符串中使用单引号('
),没有问题:
[root@mycomputer ~]# su postgres -c "psql -c \"SELECT 'hi' \" "
?column?
----------
hi
(1 row)