Выполнять запросы PostgreSQL из командной строки

279

Я вставил данные в таблицу .... Теперь я хочу увидеть всю таблицу со строками, столбцами и данными. Как я могу отобразить это через команду?

Ману Лакастер
источник

Ответы:

476

psql -U username -d mydatabase -c 'SELECT * FROM mytable'

Если вы новичок в postgresql и не знакомы с использованием инструмента командной строки, psqlто при вводе интерактивного сеанса вам следует помнить о некоторых проблемах.

Например, начать интерактивный сеанс:

psql -U username mydatabase 
mydatabase=#

На этом этапе вы можете ввести запрос напрямую, но вы должны помнить, чтобы завершить запрос точкой с запятой;

Например:

mydatabase=# SELECT * FROM mytable;

Если вы забудете точку с запятой, то, когда вы нажмете Enter, вы ничего не получите на своей обратной строке, поскольку psqlпри условии, что вы еще не завершили ввод запроса. Это может привести ко всем видам путаницы. Например, если вы повторно введете тот же запрос, вы, скорее всего, создадите синтаксическую ошибку.

В качестве эксперимента попробуйте ввести любую нужную вам ошибку в командной строке psql, а затем нажмите Enter. psqlтихо предоставит вам новую линию. Если вы введете точку с запятой в этой новой строке и нажмете Enter, вы получите ОШИБКУ:

mydatabase=# asdfs 
mydatabase=# ;  
ERROR:  syntax error at or near "asdfs"
LINE 1: asdfs
    ^

Практическое правило: если вы не получили ответа, psqlно ожидали, по крайней мере, ЧТО-ТО, то вы забыли точку с запятой;

Грант
источник
4
Начиная как минимум с 7.2 (это было еще до того, как я потрудился проверить, может быть, даже раньше), у psql есть опция --single-line(или -s), которая делает каждую команду незамедлительной без добавления точки с запятой.
Гордон
3
Я потратил час на отладку, и проблема заключалась в пропущенной точке с запятой. СПАСИБО
Доусон Б
106
SELECT * FROM my_table;

где my_tableимя вашей таблицы

РЕДАКТИРОВАТЬ:

psql -c "SELECT * FROM my_table"

или просто, psqlа затем введите ваши запросы.

Пол Дрэйпер
источник
7
psql -U username -c your_database "SELECT * FROM my_table"
DrColossos
3
как сказано, вы должны закончить свою команду точкой с запятой ; если вы работаете в системе Windows, смотрите уведомления для пользователей Windows , просто поставьте cmd.exe /c chcp 1252после того, как вы открыли консоль.
D_Guidi
2
для будущих пользователей обязательно добавьте -d перед именем вашей базы данных и -c перед запросом: psql -U username -d mydatabase -c 'SELECT * FROM mytable'
jmhead
2
не работал для меня. Я сделалpsql: FATAL: database "SELECT * FROM tb_name" does not exist
Jaswinder
Как указал @DrColossos, кажется, что двойные кавычки вокруг команды необходимы, по крайней мере, из среды Windows / cli.
jewbix.cube
43

Если ваша БД защищена паролем, то решение будет:

PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"
pyAddict
источник
3
Никогда не знаешь, можешь предоставить пароль таким способом. Это очень удобно при тестировании. Спасибо
zhihong
21

Откройте «SQL Shell (psql)» из ваших приложений (Mac).

введите описание изображения здесь

Нажмите ввод для настроек по умолчанию. Введите пароль при появлении запроса.

введите описание изображения здесь

*) Тип \?для помощи

*) Введите, \conninfoчтобы увидеть, к какому пользователю вы подключены.

*) Введите, \lчтобы увидеть список баз данных.

введите описание изображения здесь

*) Подключиться к базе данных \c <Name of DB>, например,\c GeneDB1

введите описание изображения здесь

Вы должны увидеть изменение подсказки ключа для новой БД, например, так: введите описание изображения здесь

*) Теперь, когда вы находитесь в данной БД, вы хотите знать схемы для этой БД. Лучшая команда для этого \dn.

введите описание изображения здесь

Другие команды , которые также работают (но не так хорошо) являются select schema_name from information_schema.schemata;и select nspname from pg_catalog.pg_namespace;:

введите описание изображения здесь

-) Теперь, когда у вас есть схемы, вы хотите знать таблицы в этих схемах. Для этого вы можете использовать dtкоманду. Например\dt "GeneSchema1".*

введите описание изображения здесь

*) Теперь вы можете делать ваши запросы. Например:

введите описание изображения здесь

*) Вот как выглядят приведенные выше БД, Схема и Таблицы в pgAdmin:

введите описание изображения здесь

Ген
источник
3
  1. Откройте командную строку и перейдите в каталог, где установлен Postgres. В моем случае мой путь к Postgres - «D: \ TOOLS \ Postgresql-9.4.1-3». После этого перемещение в каталог bin командной строки Postgres.So отображается как «D: \ TOOLS \ Postgresql-9.4.1-3». \ Bin>»
  2. Теперь моя цель состоит в том, чтобы выбрать «UserName» из таблицы пользователей, используя значение «UserId». Так что запрос к базе данных « Выберите u.« UserName »среди пользователей u Где u.« UserId »= 1 ».

Тот же запрос написан, как показано ниже для командной строки psql из postgres.

D: \ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d DatabaseName -h localhost - t -c "Выбрать u. \" UserName \ "из пользователей u Где u. \" UserId \ "= 1;

KPatel
источник
3

У меня нет сомнений в ответе @Grant. Но иногда я сталкиваюсь с некоторыми проблемами, например, если имя столбца похоже на любое зарезервированное ключевое слово postgresql, например, в этом случае natural. В этом случае подобный SQL сложно запустить из командной строки, так как в поле Query потребуется «\ natural \». Поэтому мой подход заключается в том, чтобы написать SQL в отдельном файле и запустить файл SQL из командной строки. Это имеет еще одно преимущество. Если вам нужно изменить запрос для большого скрипта, вам не нужно трогать файл скрипта или команду. Измените только файл SQL, как это

psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql
Сон дьявола
источник
3

Я также заметил, что запрос

SELECT * FROM tablename;

выдает ошибку в командной строке psql и

SELECT * FROM "имя таблицы";

работает нормально, действительно странно, так что не забывайте двойные кавычки. Мне всегда нравились базы данных :-(

Бен
источник
-8

Для конкретного типа операторов вы можете найти более подходящие для использования Azure Data Studio- для всего остального он поставляется со встроенной командной строкой. Используя студию, вы можете находить печатные выражения и читать вывод более удобным.

Следуйте инструкциям ниже:

  1. Установить Azure Data Studio - современный кроссплатформенный редактор, ориентированный на разработку данных; это открытый исходный код и расширяемый - две вещи, на которых основан сам PostgreSQL;
  2. Установите расширение PostgreSQL
  3. Подключитесь к вашему локальному или удаленному серверу:

    введите описание изображения здесь

  4. Сосредоточьтесь на написании и выполнении только SQL:

    введите описание изображения здесь

Есть много полезных функций, таких как сохранение соединений, создание групп серверов и даже встроенного терминала, если вам удобнее выполнять какую-либо задачу через psql.

gotqn
источник