如何在postgres psql命令中解决此问题?

时间:2019-07-18 02:08:15

标签: postgresql psql

在psql shell中。运行sql可以正常工作。但是当我使用psql -c时。有问题。

postgres@03e0948a4fed:/home/data$ psql --c "select version();"
                                                             version
----------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 11.4 (Debian 11.4-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
(1 row)
postgres@03e0948a4fed:/home/data$ psql
psql (11.4 (Debian 11.4-1.pgdg90+1))
Type "help" for help.

postgres=# truncate table "TEST"."E0005";
TRUNCATE TABLE

postgres@03e0948a4fed:/home/data$ psql --c "truncate" "table" "TEST"."E0005";
psql: FATAL:  role "TEST.E0005" does not exist

postgres@03e0948a4fed:/home/data$ psql --c "truncate table TEST.E0005;" `ERROR: schema "TEST" does not exist.`

2 个答案:

答案 0 :(得分:2)

有两个问题:

  1. -c的参数必须是单个字符串
  2. 您不能在不转义的情况下嵌套相同的引号。

因此,您有两种解决方案:

psql -c 'TRUNCATE TABLE "TEST"."E0005"'

psql -c "TRUNCATE TABLE \"TEST\".\"E0005\""

答案 1 :(得分:1)

要增加Laurenz Albe的答案,您还可以通过标准输入传递命令,而不必担心引号。

psql <<eof
  TRUNCATE TABLE "TEST"."E0005"
eof