我试图执行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''"
任何人都可以告诉我如何绕编码和上面的命令collate转义引号
谢谢
罗斯塔
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