Windows上的Postgres-如何将PSQL命令行拆分为多行?

时间:2018-06-30 15:00:00

标签: windows postgresql batch-file psql

我正在使用Windows批处理文件使用psql连接到postgres。我正在发出这样的命令。...

SET PGPASSWORD=postgres
psql -U postgres -d postgres -c "DROP USER IF EXISTS foo;"

对于在数据库上运行一个简短的SQL命令,此方法很好用。但是我遇到了两个相关问题

  1. 如何在多行中继续执行单个长SQL命令,以及
  2. 如何运行多个命令。

示例1 .....

psql -U postgres -d postgres -c "CREATE DATABASE foo
WITH OWNER = bar
ENCODING = 'UTF8' 
TABLESPACE = mytabspace;"

示例2 .....

psql -U postgres -d postgres -c "
ALTER TABLE one ALTER COLUMN X TYPE INTEGER;
ALTER TABLE two ALTER COLUMN Y TYPE INTEGER;"

这两种方法都无法如所示那样工作,我已经进行了一些谷歌搜索,并找到了一些有关在Linux上进行此操作的建议,并尝试了各种克拉,反斜杠和下划线,但似乎无法拆分跨行命令。

我知道-f选项可以运行文件,但是我正试图避免这种情况。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

批处理中的行连续字符为^。参见this Q&A

  • 因此,以空格+尖号^结尾,并确保以下行以空格开头。

  • 您还必须使用尖号转义跨几行的双引号区域,以使其起作用。

    • 由于该行未加引号,所以对于批处理解析器,您还必须使用脱字号转义任何<>|&之类的特殊字符。
psql -U postgres -d postgres -c ^"CREATE DATABASE foo ^
 WITH OWNER = bar ^
 ENCODING = 'UTF8' ^
 TABLESPACE = mytabspace;"

psql -U postgres -d postgres -c ^" ^
 ALTER TABLE one ALTER COLUMN X TYPE INTEGER; ^
 ALTER TABLE two ALTER COLUMN Y TYPE INTEGER;"