使用 ssh 在 postgres 中执行多行查询的便捷方法是什么?

Cha*_*son 16 postgresql

假设我需要在控制台中手写一些查询,执行多行查询(如CREATE TABLE语句)的最有效方法是什么?

我习惯于使用 Microsoft Management Studio,但我现在发现自己必须即时了解 PostgreSQL。

小智 39

以下将带您进入 PostgreSQL 的交互式终端:

$ psql <your database name>
Run Code Online (Sandbox Code Playgroud)

然后输入\e(或\edit)打开一个编辑器(vi默认):

# \e
Run Code Online (Sandbox Code Playgroud)

写一些查询:

select now();
Run Code Online (Sandbox Code Playgroud)

最后,保存并退出您的编辑器(例如:wq在 中vi),然后psql将运行您刚刚编写的查询。

要设置不同的编辑器,例如vimnano,请设置以下环境变量之一:PSQL_EDITOREDITORVISUAL

有关更多信息,请参阅https://www.postgresql.org/docs/current/app-psql.html并搜索\e


小智 9

您可以在 bash(.sh 文件)中使用此语法:

psql postgres://postgres:postgres@localhost:5432/postgres << SQL
CREATE TABLE "public"."links" (
  id bigint PRIMARY KEY,
  from_id bigint DEFAULT 0,
  to_id bigint DEFAULT 0,
  type_id bigint NOT NULL
);
SQL
Run Code Online (Sandbox Code Playgroud)


小智 7

显而易见,但如果有人不知道,您可以直接在 psql 提示符中编写多行语句:

psql -h localhost -p 5432 -U postgres public
public=# SELECT
public=# *
public=# FROM
public=# mytable
public=# LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

请注意尾随;字符 - 任何 SQL 命令只有在发出该字符后才会执行。因此,最简单的方法是简单地复制并粘贴带有结尾的多行 SQL 命令;


vor*_*aq7 5

真的没有“多行查询”这样的东西——就 PostgreSQL 而言,所有的空格和那些换行符都是没有意义的(除非它们出现在一个字符串中,或​​者我们正在谈论制表符等在COPY语句或其他几个特殊的地方)。

通过 SSH 在“控制台上”编写查询通常是使用该psql工具完成的,该工具是 Postgres 交互式终端(有关更多信息,请参阅文档)。

您可以将包含查询的文本文件传递给psql使用该-f选项。

您还可以将查询传递到psql命令行(根据您的 shell 引用),或通过 STDIN(标准输入流)将它们通过管道输入 - 请参阅-c选项。