Какой удобный способ выполнения многострочных запросов в postgres с использованием ssh?

9

Скажем, мне нужно написать несколько запросов в консоли, каков наиболее эффективный способ выполнения многострочных запросов, таких как CREATE TABLEоператоры?

Я привык использовать Microsoft Management Studio, но теперь мне приходится изучать PostgreSQL на лету.

Чад Харрисон
источник
Введите это? Скопировать и вставить? Перенаправление из файла?
Майкл Хэмптон
Да, я имею в виду набрать это пальцами: P. Я имею в виду, что #приглашение postgres появляется только по одной строке за раз, что отлично подходит для таких вещей, как CREATE DATABASEили ALTER USER. Как я смогу приятно отформатировать свой текст перед выполнением?
Чад Харрисон

Ответы:

4

На самом деле не существует такого понятия, как «многострочный запрос» - поскольку PostgreSQL заботится о том, что все эти пробелы и эти новые строки не имеют смысла (если они не встречаются внутри строки, или мы говорим о вкладках и так далее в COPYвыражении или несколько других особых мест).

Написание запросов «на консоли» через SSH обычно выполняется с помощью psqlинструмента, который является интерактивным терминалом Postgres (дополнительную информацию см. В документации ).

Вы можете передавать текстовые файлы , содержащие запросы в psqlиспользовании -fопции.

Вы также можете передавать запросы psqlв командную строку (в кавычках в зависимости от вашей оболочки) или передавать их через STDIN (стандартный поток ввода) - см. -cОпцию.

voretaq7
источник
Трубы, должны были подумать о трубах. Я все еще учусь.
Чад Харрисон
25

Следующее приведет вас к интерактивному терминалу PostgreSQL:

$ psql <your database name>

Затем введите \e(или \edit), чтобы открыть редактор ( viпо умолчанию):

# \e

Написать запрос:

select now();

Наконец, сохраните и выйдите из своего редактора (например, :wqв vi) и psqlзапустите только что написанный запрос.

Чтобы установить другой редактор, например, vimили nano, установить одну из следующих переменных среды: PSQL_EDITOR, EDITOR, VISUAL.

Для получения дополнительной информации см. Https://www.postgresql.org/docs/current/app-psql.html и выполните поиск \e.

TheGrimmScientist
источник
2

Вы можете записать запрос во временный файл и выполнить его с помощью psql -f /path/to/temp/file

Нам Г ВУ
источник
0

Очевидно, но если кто-то не знает, вы можете написать многострочные операторы непосредственно в приглашении psql:

psql -h localhost -p 5432 -U postgres public
public=# SELECT
public=# *
public=# FROM
public=# mytable
public=# LIMIT 1;

Обратите внимание на завершающий ;символ - любая команда SQL будет выполняться только после его выдачи. Таким образом, самый простой способ - просто скопировать и вставить многострочные команды SQL с завершающим символом ;.

Alex
источник