Перейти к основному содержимому

Способы подключения

В предыдущих разделах мы уже касались клиента psql. Теперь рассмотрим работу с ним более подробно.

В этом разделе рассматриваются различные способы подключения к серверу СУБД Pangolin с помощью клиента psql.

Работа в среде psql​

Прежде чем рассматривать различные способы подключения, вспомним основной инструмент – клиент psql.

Программа psql — это базовый клиент, поставляющийся вместе с СУБД. Среди множества других клиентов (графических, встроенных в приложения) psql является единственным стандартным.

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

Помимо администрирования клиент psql нужен для выполнения скриптов.

Для выхода из интерактивного режима psql используйте команду \q. Подробнее в справке.

Подключение суперпользователем​

Суперпользователь – это специальная роль в СУБД, обладающая неограниченными правами, а также являющаяся владельцем кластера баз данных. По умолчанию при создании кластера единственным суперпользователем является роль postgres. Суперпользователь может выполнять любые действия: создавать базы данных, роли, изменять конфигурацию, подключаться к любой базе данных.

Подключимся как суперпользователь к psql:

[student@ServerName ~]$ sudo su - postgres
[postgres@ServerName ~]$ psql
psql (15.5)
Type "help" for help.
Внимание!

Работа в сеансе суперпользователя должна выполняться только при наличии обоснованной необходимости, когда привилегий обычных пользователей недостаточно. Неосторожные действия суперпользователя могут привести к потере данных или нарушению работы СУБД.

В виртуальной машине для этого курса доступ к сеансу суперпользователя от имени пользователя ОС postgres разрешается без пароля (подробнее в главе «Авторизация и аутентификация»).

Для дальнейшей работы потребуется пользователь student и принадлежащая ему одноименная база данных. В сеансе psql суперпользователя выполните команды:

Примечание

Имя роли student и одноименная база данных выбраны для соответствия имени пользователя ОС. Если ваш пользователь ОС называется иначе (например, user123), замените student на user123 или любое другое имя.

postgres# CREATE USER student PASSWORD 'student';
CREATE ROLE
postgres# CREATE DATABASE student OWNER student;
CREATE DATABASE

Подробности читайте в справке: о создании пользователя и базы данных.

Опции для подключения​

Клиент psql принимает множество опций, позволяющих задать параметры подключения. Основные из них:

[student@ServerName ~]$ psql -d student -U student -h localhost -p 5432
psql (15.5)
Type "help" for help.

Где:

  • -d — имя базы данных, по умолчанию совпадающее с именем пользователя;
  • -U - имя пользователя (точнее – роли), зарегистрированного в кластере баз данных;
  • -h - имя хоста для подключения, либо его сетевой адрес, либо имя каталога, в котором находится Unix-сокет;
  • -p - TCP-порт для подключения, по умолчанию 5432.

Больше деталей про опции.

Примечание

Для успешного подключения необходимо, чтобы в конфигурационном файле pg_hba.conf были разрешения для данного типа подключения. Подробнее об этом рассказывается в курсе DBA1 в главе «Авторизация и аутентификация».

Строка подключения​

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

[student@ServerName ~]$ psql "dbname=student user=student host=localhost"
psql (15.5)
Type "help" for help.

Основные параметры строки подключения:

  • dbname — имя базы данных;
  • user — имя пользователя (точнее, роли);
  • host — имя хоста для подключения, либо его сетевой адрес, либо имя каталога, в котором находится Unix-сокет;
  • port — TCP порт для подключения.

Строка подключения предоставляет даже большие возможности, чем опции командной строки.

Подключение по умолчанию​

Если не использовать никаких аргументов, psql использует значения по умолчанию:

[student@ServerName ~]$ psql
psql (15.5)
Type "help" for help.
student=> \conninfo
You are connected to database "student" as user "student" via socket in "/tmp" at port "5432".

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

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

Любое подключение осуществляется от имени конкретной роли к единственной базе данных.

Подключение в сеансе psql​

Если клиент psql уже запущен, можно сменить параметры подключения без выхода из программы. Для этого используется метакоманда \c (или \connect). При этом предыдущее подключение будет завершено при успешном выполнении нового подключения.

Переключимся на базу данных postgres (тем же пользователем):

student=> \c postgres
You are now connected to database "postgres" as user "student".

Теперь сменим пользователя на postgres:

student=> \c - postgres
You are now connected to database "postgres" as user "postgres".

Подключимся к базе student пользователем student через localhost:

postgres=# \c student student localhost
You are now connected to database "student" as user "student" on host "localhost" (address "::1") at port "5432".
Синтаксис команды \c

\c [имя_БД] [имя_роли] [хост] [порт]

Если выполнить команду \c без аргументов, то текущее подключение будет завершено, а взамен будет открыто новое с такими же параметрами.

Итоги​

  • psql – стандартный клиент в комплекте поставки;
  • Суперпользователь (postgres) имеет неограниченные права и используется для начального создания объектов и администрирования;
  • Позволяет подключаться к БД, указывая параметры подключения либо в командной строке с помощью опций и аргументов команды psql, либо с помощью встроенных команд интерпретатора psql.

Самопроверка​

Вопрос 1

Какая опция командной строки задает имя базы данных для подключения?

Вопрос 2

Какая метакоманда показывает информацию о текущем подключении?

Вопрос 3

Что произойдет при выполнении команды psql без аргументов если не заданы переменные окружения?