如何将 PSQL 命令行拆分为多行?

Con*_*bil 3 postgresql batch-file psql

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

SET PGPASSWORD=postgres
psql -U postgres -d postgres -c "DROP USER IF EXISTS foo;"
Run Code Online (Sandbox Code Playgroud)

这对于针对数据库运行一个简短的 SQL 命令非常有效。但我遇到了两个相关问题

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

示例1......

psql -U postgres -d postgres -c "CREATE DATABASE foo
WITH OWNER = bar
ENCODING = 'UTF8' 
TABLESPACE = mytabspace;"
Run Code Online (Sandbox Code Playgroud)

示例2......

psql -U postgres -d postgres -c "
ALTER TABLE one ALTER COLUMN X TYPE INTEGER;
ALTER TABLE two ALTER COLUMN Y TYPE INTEGER;"
Run Code Online (Sandbox Code Playgroud)

这些都不会如图所示工作,我做了一些谷歌搜索,发现了一些使用 linux 执行此操作的建议,并尝试了各种克拉、反斜杠和下划线,但似乎无法跨行分割命令。

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

有什么建议么?

小智 8

批处理中的行继续符是^. 请参阅此问答

  • 因此,以空格+插入符号结束该行 ^,并确保下一行以空格开头。

  • 您还必须使用脱字符号来转义跨多行的双引号区域,才能使其正常工作。

    • 由于该行未加引号,因此对于批处理解析器,您还必须转义任何特殊字符,例如<>|&插入符号。
psql -U postgres -d postgres -c ^"创建数据库 foo ^
 与所有者 = 酒吧 ^
 编码 = 'UTF8' ^
 表空间 = mytabspace;"

psql -U postgres -d postgres -c ^" ^
 更改表一 更改列 X 类型整数;^
 更改表二更改列 Y 类型整数;”