在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.`
答案 0 :(得分:2)
有两个问题:
-c
的参数必须是单个字符串因此,您有两种解决方案:
psql -c 'TRUNCATE TABLE "TEST"."E0005"'
或
psql -c "TRUNCATE TABLE \"TEST\".\"E0005\""
答案 1 :(得分:1)
要增加Laurenz Albe的答案,您还可以通过标准输入传递命令,而不必担心引号。
psql <<eof
TRUNCATE TABLE "TEST"."E0005"
eof