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

3
我正在使用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;"

Example 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个回答

6

在批处理中,行继续字符是^。请参见此问答

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

  • 如果要使其起作用,则还必须使用caret转义跨越多行的双引号区域。

    • 由于该行未加引号,因此对于批处理解析器,您还必须使用caret转义任何特殊字符,如<>|&
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;"

1
感谢@LotPings - 这就是解决的方法。真遗憾电脑在你接近正确答案时不会给你一个“越来越接近”的提示 - 我花了90分钟尝试各种变化。还有另一个小问题需要注意 - 确保插入符号后的任何空格都已删除,在我发现这个问题之前浪费了另外5分钟。 - ConanTheGerbil
计算机/软件对细节非常挑剔。我认为“因此在行末加上空格+插入符号”是不含糊的。;-) - user6811411
1
我认为以空格+插入符号结尾是不含糊的,但它看起来非常类似于空格+插入符号加上随机空格! - ConanTheGerbil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接