在shell中为postgresql转义单引号

我试图执行SQL通过psql下postgres帐户。 我能运行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查询出现问题。 即时通讯testing简单的“嗨”,但我想从shell脚本执行这样的事情。

 su postgres -c "psql -c 'create database $DB_NAME template=template0 encoding='utf8' owner=aaa lc_collate='cs_CZ.utf8''" 

任何人都可以告诉我如何绕编码和上面的命令collat​​e转义引号

谢谢

罗斯塔

我的一些testing

 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\\'\'' 

我通常使用双引号( " )为postgres -c的参数,并且为psql -c的参数使用双引号( \" )。 这样,我可以在SQL字符串中使用单引号( ' ),没有任何问题:

 [root@mycomputer ~]# su postgres -c "psql -c \"SELECT 'hi' \" " ?column? ---------- hi (1 row) 

最简单的方法是使用“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