Порт postgresql: PostgreSQL : Документация: 9.6: postgres : Компания Postgres Professional
Postgresql port confusion 5433 или 5432?
Вопрос:
Я установил postgresql в OSX. Когда я запускаю psql, я получаю
$ psql
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5433"?
Однако из /etc/services
postgresql 5432/udp # PostgreSQL Database
postgresql 5432/tcp # PostgreSQL Database
# Tom Lane <[email protected]>
pyrrho 5433/tcp # Pyrrho DBMS
pyrrho 5433/udp # Pyrrho DBMS
5433 занята пирро, 5432 присваивается pg. Я могу подключиться к
psql -p 5432
но почему psql считает, что это 5433 и как я могу сделать psql в нужном месте по умолчанию?
Лучший ответ:
/etc/services
является лишь рекомендательным, это список известных портов. Это не означает, что на этом порту что-то действительно выполняется или что именованная служба будет работать на этом порту.
В случае PostgreSQL обычно используется порт 5432, если он доступен. Если это не так, большинство установщиков выберут следующий свободный порт, обычно 5433.
Вы можете увидеть, что на самом деле работает, используя инструмент netstat
(доступный в OS X, Windows и Linux, с синтаксисом командной строки, различающимся для всех трех).
Это еще более усложняется в системах Mac OS X из-за ужасной путаницы различных пакетов PostgreSQL — древней версии Apple, встроенной в ОС PostgreSQL, Postgres.app, Homebrew, Macports, установщика EnterpriseDB и т.д. И т.д.
В конечном итоге пользователь устанавливает Pg и запускает сервер из одной упаковки, но использует клиента psql
и libpq
из другой упаковки. Обычно это происходит, когда они запускают Postgres.app или homebrew Pg и соединяются с psql
, который поставляется с ОС. Они не только иногда имеют разные порты по умолчанию, но и Pg, поставляемый с Mac OS X, имеет другой путь к сокету Unix по умолчанию, поэтому даже если сервер работает на том же порту, он не будет слушать тот же сокет Unix.
Большинство пользователей Mac работают с этим, просто используя tcp/ip с psql -h localhost
. При необходимости вы также можете указать порт, например, psql -h localhost -p 5433
. Возможно, у вас запущено несколько экземпляров PostgreSQL, поэтому убедитесь, что вы подключаетесь к нужному экземпляру, используя select version()
и SHOW data_directory;
.
Вы также можете указать каталог сокетов Unix; проверьте настройку unix_socket_directories
экземпляра PostgreSQL, к которому вы хотите подключиться, и укажите его с помощью psql -h
, например psql -h /tmp
.
Более чистое решение состоит в том, чтобы исправить вашу систему PATH
так, чтобы psql
и libpq
, связанные с PostgreSQL, на котором вы в действительности работали, были первыми найдены в PATH
. Детали этого зависят от вашей версии Mac OS X и от того, какие пакеты Pg вы установили. Я не пользуюсь Mac и не могу предложить гораздо больше деталей в этой области, не тратя больше времени, чем доступно в настоящее время.
Ответ №1
Быстрый ответ на OSX, установите переменные среды.
export PGHOST = localhost
экспорт PGPORT = 5432
Или что вам нужно.
Ответ №2
Порт Postgres по умолчанию обычно настраивается в:
sudo vi /<path to your installation>/data/postgresql.conf
В Ubuntu это может быть:
sudo vi /<path to your installation>/main/postgresql.conf
Найдите port
в этом файле.
Ответ №3
Похоже, что одна из наиболее распространенных причин этого — установка новой версии PostgreSQL без остановки службы существующей установки. Это была моя особая головная боль. Перед установкой или обновлением, особенно в ОС X и с помощью установщика с одним щелчком мыши из Enterprise DB, перед продолжением убедитесь, что вы проверяете состояние старой установки.
Ответ №4
Благодаря @a_horse_with_no_name comment я изменил определение PGPORT на 5432 в pg_env.sh, Это поставило проблему для меня. Я не знаю, почему postgres установили его как 5433 изначально, когда он размещал услугу на 5432.
Ответ №5
Я столкнулся с этой проблемой, в итоге у меня было два сервера postgres, работающих одновременно. Я удалил один из них и изменил порт на 5432 и теперь отлично работает.
Ответ №6
Для меня в PgAdmin 4 на Mac OS High Sierra, щелкнув базу данных PostrgreSQL10 в Сервера в левый столбец, затем вкладка Свойства показала 5433 как порт под Соединение. (Я не знаю, почему, потому что я выбрал 5432 во время установки). Во всяком случае, я щелкнул значок Изменить на вкладке Свойства, изменил ее на 5432, сохранил и решил эту проблему. Наведите указатель мыши.
PostgreSQL : Документация: 9.6: 19.3. Подключения и аутентификация : Компания Postgres Professional
listen_addresses
(string
)Задаёт адреса TCP/IP, по которым сервер будет принимать подключения клиентских приложений. Это значение принимает форму списка, разделённого запятыми, из имён и/или числовых IP-адресов компьютеров. Особый элемент, *
, обозначает все имеющиеся IP-интерфейсы. Запись 0.0.0.0
позволяет задействовать все адреса IPv4, а ::
— все адреса IPv6. Если список пуст, сервер не будет привязываться ни к какому IP-интерфейсу, а значит, подключиться к нему можно будет только через Unix-сокеты. По умолчанию этот параметр содержит localhost, что допускает подключение к серверу по TCP/IP только через локальный интерфейс «замыкания». Хотя механизм аутентификации клиентов (см. Главу 20) позволяет гибко управлять доступом пользователей к серверу, параметр listen_addresses
может ограничить интерфейсы, через которые будут приниматься соединения, что бывает полезно для предотвращения злонамеренных попыток подключения через незащищённые сетевые интерфейсы. Этот параметр можно задать только при запуске сервера.
port
(integer
)TCP-порт, открываемый сервером; по умолчанию, 5432. Заметьте, что этот порт используется для всех IP-адресов, через которые сервер принимает подключения. Этот параметр можно задать только при запуске сервера.
max_connections
(integer
)Определяет максимальное число одновременных подключений к серверу БД. По умолчанию обычно это 100 подключений, но это число может быть меньше, если ядро накладывает свои ограничения (это определяется в процессе initdb). Этот параметр можно задать только при запуске сервера.
Для ведомого сервера значение этого параметра должно быть больше или равно значению на ведущем. В противном случае на ведомом сервере не будут разрешены запросы.
superuser_reserved_connections
(integer
)Определяет количество «слотов» подключений, которые PostgreSQL будет резервировать для суперпользователей. При этом всего одновременно активными могут быть максимум max_connections подключений. Когда число активных одновременных подключений больше или равно max_connections
минус superuser_reserved_connections
, принимаются только подключения суперпользователей, а все другие подключения, в том числе подключения для репликации, запрещаются.
По умолчанию резервируются три соединения. Это значение должно быть меньше значения max_connections
. Задать этот параметр можно только при запуске сервера.
unix_socket_directories
(string
)Задаёт каталог Unix-сокета, через который сервер будет принимать подключения клиентских приложений. Создать несколько сокетов можно, перечислив в этом значении несколько каталогов через запятую. Пробелы между элементами этого списка игнорируются; если в пути каталога содержатся пробелы, его нужно заключать в двойные кавычки. При пустом значении сервер не будет работать с Unix-сокетами, в этом случае к нему можно будет подключиться только по TCP/IP. Значение по умолчанию обычно /tmp
, но его можно изменить во время сборки. Задать этот параметр можно только при запуске сервера.
Помимо самого файла сокета, который называется .s.PGSQL.
(где nnnn
nnnn
— номер порта сервера), в каждом каталоге unix_socket_directories
создаётся обычный файл .s.PGSQL.
. Ни в коем случае не удаляйте эти файлы вручную.nnnn
.lock
Этот параметр не действует в системе Windows, так как в ней нет Unix-сокетов.
unix_socket_group
(string
)Задаёт группу-владельца Unix-сокетов. (Пользователем-владельцем сокетов всегда будет пользователь, запускающий сервер.) В сочетании с unix_socket_permissions
данный параметр можно использовать как дополнительный механизм управления доступом к Unix-сокетам. По умолчанию он содержит пустую строку, то есть группой-владельцем становится основная группа пользователя, запускающего сервер. Задать этот параметр можно только при запуске сервера.
Этот параметр не действует в системе Windows, так как в ней нет Unix-сокетов.
unix_socket_permissions
(integer
)Задаёт права доступа к Unix-сокетам. Для Unix-сокетов применяется обычный набор разрешений Unix. Значение параметра ожидается в числовом виде, который принимают функции chmod
и umask
. (Для применения обычного восьмеричного формата число должно начинаться с 0
(нуля).)
По умолчанию действуют разрешения 0777
, при которых подключаться к сокету могут все. Другие разумные варианты — 0770
(доступ имеет только пользователь и группа, см. также unix_socket_group
) и 0700
(только пользователь). (Заметьте, что для Unix-сокетов требуется только право на запись, так что добавлять или отзывать права на чтение/выполнение не имеет смысла.)
Этот механизм управления доступом не зависит от описанного в Главе 20.
Этот параметр можно задать только при запуске сервера.
Данный параметр неприменим для некоторых систем, в частности, Solaris (а именно Solaris 10), которые полностью игнорируют разрешения для сокетов. В таких системах примерно тот же эффект можно получить, указав в параметре unix_socket_directories
каталог, доступ к которому ограничен должным образом. Этот параметр также неприменим в Windows, где нет Unix-сокетов.
bonjour
(boolean
)Включает объявления о существовании сервера посредством Bonjour. По умолчанию выключен. Задать этот параметр можно только при запуске сервера.
bonjour_name
(string
)Задаёт имя службы в среде Bonjour. Если значение этого параметра — пустая строка (''
) (это значение по умолчанию), в качестве этого имени используется имя компьютера. Этот параметр игнорируется, если сервер был скомпилирован без поддержки Bonjour. Задать этот параметр можно только при запуске сервера.
tcp_keepalives_idle
(integer
)Задаёт период неактивности (в секундах), после которого по TCP клиенту должен отправляться сигнал сохранения соединения. При значении 0 действует системный параметр. Этот параметр поддерживается только в системах, воспринимающих параметр сокета TCP_KEEPIDLE
или равнозначный, а также в Windows; в других системах он должен быть равен нулю. В сеансах, подключённых через Unix-сокеты, он игнорируется и всегда считается равным 0.
Примечание
В Windows при нулевом значении этот период устанавливается равным 2 часам, так как Windows не позволяет прочитать системное значение по умолчанию.
tcp_keepalives_interval
(integer
)Задаёт интервал (в секундах), по истечении которого следует повторять сигнал сохранения соединения, если ответ от клиента не был получен. При значении 0 действует системная величина. Этот параметр поддерживается только в системах, воспринимающих параметр сокета TCP_KEEPINTVL
или равнозначный, а также в Windows; в других системах он должен быть равен нулю. В сеансах, подключённых через Unix-сокеты, он игнорируется и всегда считается равным 0.
Примечание
В Windows при нулевом значении этот интервал устанавливается равным 1 секунде, так как Windows не позволяет прочитать системное значение по умолчанию.
tcp_keepalives_count
(integer
)Задаёт число TCP-сигналов сохранения соединения, которые могут быть потеряны до того, как соединение сервера с клиентом будет признано прерванным. При значении 0 действует системная величина. Этот параметр поддерживается только в системах, воспринимающих параметр сокета TCP_KEEPCNT
или равнозначный; в других системах он должен быть равен нулю. В сеансах, подключённых через Unix-сокеты, он игнорируется и всегда считается равным 0.
Примечание
В Windows данный параметр не поддерживается и должен быть равен нулю.
PostgreSQL : Документация: 12: 19.3. Подключения и аутентификация : Компания Postgres Professional
listen_addresses
(string
)Задаёт адреса TCP/IP, по которым сервер будет принимать подключения клиентских приложений. Это значение принимает форму списка, разделённого запятыми, из имён и/или числовых IP-адресов компьютеров. Особый элемент, *
, обозначает все имеющиеся IP-интерфейсы. Запись 0.0.0.0
позволяет задействовать все адреса IPv4, а ::
— все адреса IPv6. Если список пуст, сервер не будет привязываться ни к какому IP-интерфейсу, а значит, подключиться к нему можно будет только через Unix-сокеты. По умолчанию этот параметр содержит localhost, что допускает подключение к серверу по TCP/IP только через локальный интерфейс «замыкания». Хотя механизм аутентификации клиентов (см. Главу 20) позволяет гибко управлять доступом пользователей к серверу, параметр listen_addresses
может ограничить интерфейсы, через которые будут приниматься соединения, что бывает полезно для предотвращения злонамеренных попыток подключения через незащищённые сетевые интерфейсы. Этот параметр можно задать только при запуске сервера.
port
(integer
)TCP-порт, открываемый сервером; по умолчанию, 5432. Заметьте, что этот порт используется для всех IP-адресов, через которые сервер принимает подключения. Этот параметр можно задать только при запуске сервера.
max_connections
(integer
)Определяет максимальное число одновременных подключений к серверу БД. По умолчанию обычно это 100 подключений, но это число может быть меньше, если ядро накладывает свои ограничения (это определяется в процессе initdb). Этот параметр можно задать только при запуске сервера.
Для ведомого сервера значение этого параметра должно быть больше или равно значению на ведущем. В противном случае на ведомом сервере не будут разрешены запросы.
superuser_reserved_connections
(integer
)Определяет количество «слотов» подключений, которые PostgreSQL будет резервировать для суперпользователей. При этом всего одновременно активными могут быть максимум max_connections подключений. Когда число активных одновременных подключений больше или равно max_connections
минус superuser_reserved_connections
, принимаются только подключения суперпользователей, а все другие подключения, в том числе подключения для репликации, запрещаются.
По умолчанию резервируются три соединения. Это значение должно быть меньше значения max_connections
. Задать этот параметр можно только при запуске сервера.
unix_socket_directories
(string
)Задаёт каталог Unix-сокета, через который сервер будет принимать подключения клиентских приложений. Создать несколько сокетов можно, перечислив в этом значении несколько каталогов через запятую. Пробелы между элементами этого списка игнорируются; если в пути каталога содержатся пробелы, его нужно заключать в двойные кавычки. При пустом значении сервер не будет работать с Unix-сокетами, в этом случае к нему можно будет подключиться только по TCP/IP. Значение по умолчанию обычно /tmp
, но его можно изменить во время сборки. Задать этот параметр можно только при запуске сервера.
Помимо самого файла сокета, который называется .s.PGSQL.
(где nnnn
nnnn
— номер порта сервера), в каждом каталоге unix_socket_directories
создаётся обычный файл .s.PGSQL.
. Ни в коем случае не удаляйте эти файлы вручную.nnnn
.lock
Этот параметр не действует в системе Windows, так как в ней нет Unix-сокетов.
unix_socket_group
(string
)Задаёт группу-владельца Unix-сокетов. (Пользователем-владельцем сокетов всегда будет пользователь, запускающий сервер.) В сочетании с unix_socket_permissions
данный параметр можно использовать как дополнительный механизм управления доступом к Unix-сокетам. По умолчанию он содержит пустую строку, то есть группой-владельцем становится основная группа пользователя, запускающего сервер. Задать этот параметр можно только при запуске сервера.
Этот параметр не действует в системе Windows, так как в ней нет Unix-сокетов.
unix_socket_permissions
(integer
)Задаёт права доступа к Unix-сокетам. Для Unix-сокетов применяется обычный набор разрешений Unix. Значение параметра ожидается в числовом виде, который принимают функции chmod
и umask
. (Для применения обычного восьмеричного формата число должно начинаться с 0
(нуля).)
По умолчанию действуют разрешения 0777
, при которых подключаться к сокету могут все. Другие разумные варианты — 0770
(доступ имеет только пользователь и группа, см. также unix_socket_group
) и 0700
(только пользователь). (Заметьте, что для Unix-сокетов требуется только право на запись, так что добавлять или отзывать права на чтение/выполнение не имеет смысла.)
Этот механизм управления доступом не зависит от описанного в Главе 20.
Этот параметр можно задать только при запуске сервера.
Данный параметр неприменим для некоторых систем, в частности, Solaris (а именно Solaris 10), которые полностью игнорируют разрешения для сокетов. В таких системах примерно тот же эффект можно получить, указав в параметре unix_socket_directories
каталог, доступ к которому ограничен должным образом. Этот параметр также неприменим в Windows, где нет Unix-сокетов.
bonjour
(boolean
)Включает объявления о существовании сервера посредством Bonjour. По умолчанию выключен. Задать этот параметр можно только при запуске сервера.
bonjour_name
(string
)Задаёт имя службы в среде Bonjour. Если значение этого параметра — пустая строка (''
) (это значение по умолчанию), в качестве этого имени используется имя компьютера. Этот параметр игнорируется, если сервер был скомпилирован без поддержки Bonjour. Задать этот параметр можно только при запуске сервера.
tcp_keepalives_idle
(integer
)Задаёт период отсутствия сетевой активности, по истечении которого операционная система должна отправить клиенту TCP-сигнал сохранения соединения. Если это значение задаётся без единиц измерения, оно считается заданным в секундах. При значении 0 (по умолчанию) действует величина, принятая по умолчанию в операционной системе. Этот параметр поддерживается только в системах, воспринимающих параметр сокета TCP_KEEPIDLE
или равнозначный, а также в Windows; в других системах он должен быть равен нулю. В сеансах, подключённых через Unix-сокеты, он игнорируется и всегда считается равным 0.
Примечание
В Windows при присвоении нулевого значения этот период устанавливается равным 2 часам, так как Windows не позволяет прочитать системное значение по умолчанию.
tcp_keepalives_interval
(integer
)Задаёт интервал, по истечении которого следует повторять TCP-сигнал сохранения соединения, если от клиента не получено подтверждение предыдущего сигнала. Если это значение задаётся без единиц измерения, оно считается заданным в секундах. При значении 0 (по умолчанию) действует величина, принятая по умолчанию в операционной системе. Этот параметр поддерживается только в системах, воспринимающих параметр сокета TCP_KEEPINTVL
или равнозначный, а также в Windows; в других системах он должен быть равен нулю. В сеансах, подключённых через Unix-сокеты, он игнорируется и всегда считается равным 0.
Примечание
В Windows при присвоении нулевого значения интервал устанавливается равным 1 секунде, так как Windows не позволяет прочитать системное значение по умолчанию.
tcp_keepalives_count
(integer
)Задаёт число TCP-сигналов сохранения соединения, которые могут быть потеряны до того, как соединение сервера с клиентом будет признано прерванным. При значении 0 (по умолчанию) действует величина, принятая по умолчанию в операционной системе. Этот параметр поддерживается только в системах, воспринимающих параметр сокета TCP_KEEPCNT
или равнозначный; в других системах он должен быть равен нулю. В сеансах, подключённых через Unix-сокеты, он игнорируется и всегда считается равным 0.
Примечание
В Windows данный параметр не поддерживается и должен быть равен нулю.
tcp_user_timeout
(integer
)Задаёт интервал, в течение которого переданные данные могут оставаться неподтверждёнными, прежде чем будет принято решение о принудительном закрытии TCP-соединения. Если это значение задаётся без единиц измерения, оно считается заданным в миллисекундах. При значении 0 (по умолчанию) действует величина, принятая по умолчанию в операционной системе. Этот параметр поддерживается только в системах, воспринимающих параметр сокета TCP_USER_TIMEOUT
; в других системах он должен быть равен нулю. В сеансах, подключённых через доменные сокеты Unix, он игнорируется и всегда считается равным 0.
Примечание
В Windows данный параметр не поддерживается и должен быть равен нулю.
security — как обеспечить открытый порт PostgreSQL
Требовать SSL, включить SELinux, следить за журналами и использовать текущую версию PostgreSQL .
Требовать SSL
В postgresql.conf
установить ssl=on
и убедитесь, что вы правильно установили свой файл ключей и certfile (см. документы и комментарии в postgresql.conf
).
Вам может потребоваться купить сертификат от ЦС, если вы хотите, чтобы он доверял клиентов без специальной настройки на клиенте.
В pg_hba.conf
используйте что-то вроде:
hostssl theuser thedatabase 1.2.3.4/32 md5
… возможно, с «все» для пользователя и /или базы данных и, возможно, с более широким фильтром IP-адресов источника.
Ограничить пользователей, которые могут войти в систему, запретить вход удаленного суперпользователя
Не разрешать «всем» для пользователей, если это возможно; вы не хотите разрешать авторизацию входа суперпользователя удаленно, если вы можете избежать необходимости в нем.
Ограничить права пользователей
Ограничьте права пользователей (пользователей), которые могут войти в систему. Не указывайте их CREATEDB
или CREATEUSER
.
REVOKE
CONNECT
справа от PUBLIC
во всех ваших базах данных, а затем вернуть его только тем пользователям /ролям, которые должны иметь доступ к этой базе данных. (Группировать пользователей в роли и предоставлять права на роли, а не напрямую для отдельных пользователей).
Убедитесь, что пользователи с удаленным доступом могут подключаться только к необходимым им БД и иметь права на схемы, таблицы и столбцы, в которых они действительно нуждаются. Это хорошая практика для местных пользователей, это просто разумная безопасность.
В PgJDBC передайте параметр ssl=true
:
Чтобы указать драйверу JDBC попробовать установить SSL-соединение, вы должны добавить параметр URL-адреса соединения ssl = true.
… и установите сертификат сервера в доверительное хранилище клиента или используйте сертификат сервера, которому доверяет один из центров сертификации во встроенном хранилище Java, если вы не хотите, чтобы пользователь должен был установить сертификат.
Теперь убедитесь, что вы продолжаете обновлять PostgreSQL . PostgreSQL имеет только пару предварительных ошибок безопасности, но это больше нуля, поэтому не обновляйтесь. В любом случае, вы должны исправить ошибки.
Добавьте брандмауэр впереди, если есть большие сетевые блоки /регионы, которые, как вы знаете, вам никогда не нужен.
Лог-соединения и разъединения (см. postgresql.conf
). Регистрируйте запросы, если это необходимо. Запустите систему обнаружения вторжений или fail2ban или аналогичную переднюю, если это будет практично. Для fail2ban с postgres существует удобный способ
путаница портов postgresql 5433 или 5432?
/etc/services
является только консультативным, это список известных портов. Это не означает, что что-либо действительно работает на этом порту или что именованная служба будет работать на этом порту.
в случае PostgreSQL обычно используется порт 5432, если он доступен. Если это не так, большинство установщиков выберет следующий свободный порт, обычно 5433.
вы можете увидеть, что на самом деле работает с помощью netstat
инструмент (доступен в OS X, Windows и Linux, с синтаксисом командной строки разной во всех трех).
это еще больше усложняется в системах Mac OS X ужасным беспорядком различных пакетов PostgreSQL-древней версии Apple PostgreSQL, встроенной в ОС Postgres.app, Homebrew, Macports, установщик EnterpriseDB и т. д.
в конечном итоге происходит то, что пользователь устанавливает Pg и запускает сервер из одной упаковки, но использует psql
и libpq
клиент из другой упаковки. Обычно это происходит, когда они используется Postgres.app или homebrew Pg и подключение с psql
который поставляется с ОС. Они не только иногда имеют разные порты по умолчанию, но и Pg, поставляемый с Mac OS X, имеет другой путь сокета unix по умолчанию, так что даже если сервер работает на том же порту, он не будет слушать тот же сокет Unix.
большинство пользователей Mac работают вокруг этого, просто используя tcp / ip с psql -h localhost
. Вы также можете указать порт, если это необходимо, например psql -h localhost -p 5433
. Вы возможно, работает несколько экземпляров PostgreSQL, поэтому убедитесь, что вы подключаетесь к правильному, используя select version()
и SHOW data_directory;
.
вы также можете указать каталог сокетов unix; проверьте unix_socket_directories
настройка экземпляра PostgreSQL, к которому вы хотите подключиться, и укажите это с помощью psql -h
, например,psql -h /tmp
.
более чистое решение-исправить вашу систему PATH
так что psql
и libpq
связанный с PostgreSQL, который вы фактически используете, это то, что найдено сначала на PATH
. Подробности этого зависят от версии Mac OS X и установленных пакетов Pg. Я не использую Mac и не могу предложить гораздо больше деталей на этой стороне, не тратя больше времени, чем в настоящее время доступно.
PostgreSQL : Документация: 12: psql : Компания Postgres Professional
-a
--echo-all
Отправляет на стандартный вывод все непустые входные строки по мере их чтения. (Это не относится к строкам, считанным в интерактивном режиме.) Эквивалентно установке переменной ECHO
в значение all
.
-A
--no-align
Переключает на невыровненный режим вывода. (По умолчанию используется другой режим, aligned
.) Равнозначно команде \pset format unaligned
.
-b
--echo-errors
Посылает все команды SQL с ошибками на стандартный вывод. Равнозначно присвоению переменной ECHO
значения errors
.
-c команда
--command=команда
Передаёт psql команду
для выполнения. Этот ключ можно повторять и комбинировать в любом порядке с ключом -f
. Когда указывается -c
или -f
, psql не читает команды со стандартного ввода; вместо этого она завершается сразу после обработки всех ключей -c
и -f
по порядку.
Заданная команда
должна быть либо командной строкой, которая полностью интерпретируется сервером (т. е. не использует специфические функции psql), либо одиночной командой с обратной косой чертой. Таким образом, используя -c
, нельзя смешивать метакоманды SQL и psql. Но это можно сделать, передав несколько ключей -c
или передав строку в psql через канал:
psql -c '\x' -c 'SELECT * FROM foo;'
или
echo '\x \\ SELECT * FROM foo;' | psql
(\\
— разделитель метакоманд.)
Каждая строка SQL-команд, заданная ключом -c
, передаётся на сервер как один запрос. Поэтому сервер выполняет её в одной транзакции, даже когда эта строка содержит несколько команд SQL, если только в ней не содержатся явные команды BEGIN
/COMMIT
, разделяющие её на несколько транзакций. (Подробнее о том, как сервер обрабатывает строки, включающие несколько команд, рассказывается в Подразделе 52.2.2.1.) Кроме того, psql печатает результат только последней SQL-команды в строке. Это отличается от поведения, когда та же строка считывается из файла или подаётся на стандартный ввод psql, так как в последнем случае psql передаёт каждую команду SQL отдельно.
Из-за такого поведения указание нескольких SQL-команд в одной строке -c
часто приводит к неожиданным результатам. Поэтому лучше использовать несколько ключей -c
или подавать команды на стандартный ввод psql, применяя либо echo, как показано выше, либо создаваемый прямо в оболочке текст, например:
psql <<EOF \x SELECT * FROM foo; EOF
--csv
Переключает в режим вывода CSV (Comma Separated Values, Значения, разделённые запятыми). Равнозначно команде \pset format csv
.
-d имя_бд
--dbname=имя_бд
Указывает имя базы данных для подключения. Равносильно указанию имя_бд
в первом аргументе командной строки, отличном от ключа.
Если этот параметр содержит знак =
или начинается с допустимого префикса URI (postgresql://
или postgres://
), он воспринимается как строка conninfo
. За дополнительными сведениями обратитесь к Подразделу 33.1.1.
-e
--echo-queries
Посылает все команды SQL, отправленные на сервер, ещё и на стандартный вывод. Эквивалентно установке переменной ECHO
в значение queries
.
-E
--echo-hidden
Отображает фактические запросы, генерируемые \d
и другими командами, начинающимися с \. Это можно использовать для изучения внутренних операций в psql. Эквивалентно установке переменной ECHO_HIDDEN
значения on
.
-f имя_файла
--file=имя_файла
Читает команды из файла имя_файла
, а не из стандартного ввода. Этот ключ можно повторять и комбинировать в любом порядке с ключом -c
. Если указан ключ -c
или -f
, программа psql не читает команды со стандартного ввода; вместо этого она завершается после обработки всех ключей -c
и -f
по очереди. Не считая этого, данный ключ по большому счёту равнозначен метакоманде \i
.
Если имя_файла
задано символом -
(минус), считывается стандартный ввод до признака конца файла или до метакоманды \q
. Это позволяет перемежать интерактивный ввод с вводом из файлов. Однако заметьте, что Readline в этом случае не применяется (так же, как и с ключом -n
).
Использование этого параметра немного отличается от psql <
. В основном, оба варианта будут делать то, что вы ожидаете, но с имя_файла
-f
доступны некоторые полезные свойства, такие как сообщения об ошибках с номерами строк. Также есть небольшая вероятность, что запуск в таком режиме будет быстрее. С другой стороны, вариант с перенаправлением ввода из командного интерпретатора (в теории) гарантирует получение точно такого же вывода, какой вы получили бы, если бы ввели всё вручную.
-F разделитель
--field-separator=разделитель
Использование разделитель
в качестве разделителя полей при невыровненном режиме вывода. Эквивалентно \pset fieldsep
или \f
.
-h компьютер
--host=компьютер
Указывает имя компьютера, на котором работает сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета.
-H
--html
Переключает в режим вывода HTML. Равнозначно команде \pset format html
или \H
.
-l
--list
Выводит список всех доступных баз данных и завершает работу. Другие параметры, не связанные с соединением, игнорируются. Это похоже на метакоманду \list
.
Когда используется этот аргумент, psql будет подключаться к базе данных postgres
, если только в командной строке не задана другая база данных (в параметре -d
или не через параметры, а, например, через запись службы, но не через переменную окружения).
-L имя_файла
--log-file=имя_файла
В дополнение к обычному выводу, записывает вывод результатов всех запросов в файл имя_файла
.
-n
--no-readline
Отключает использование Readline для редактирования командной строки и использования истории команд. Может быть полезно для выключения расширенных действий клавиши табуляции при вырезании и вставке.
-o имя_файла
--output=имя_файла
Записывает вывод результатов всех запросов в файл имя_файла
. Эквивалентно команде \o
.
-p порт
--port=порт
Указывает TCP-порт или расширение файла локального Unix-сокета, через который сервер принимает подключения. Значение по умолчанию определяется переменной среды PGPORT
, если она установлена, либо числом, заданным при компиляции, обычно 5432.
-P присвоение
--pset=присвоение
Задаёт параметры печати, в стиле команды \pset
. Обратите внимание, что имя параметра и значение разделяются знаком равенства, а не пробела. Например, чтобы установить формат вывода в LaTeX, нужно написать -P format=latex
.
-q
--quiet
Указывает, что psql должен работать без вывода дополнительных сообщений. По умолчанию, выводятся приветствия и различные информационные сообщения. Этого не произойдёт с использованием данного параметра. Полезно вместе с параметром -c
. Этот же эффект можно получить, установив для переменной QUIET
значение on
.
-R разделитель
--record-separator=разделитель
Использовать разделитель
как разделитель записей при невыровненном режиме вывода. Равнозначно команде \pset recordsep
.
-s
--single-step
Запуск в пошаговом режиме. Это означает, что пользователь будет подтверждать выполнение каждой команды, отправляемой на сервер, с возможностью отменить выполнение. Используется для отладки скриптов.
-S
--single-line
Запуск в однострочном режиме, при котором символ новой строки завершает SQL-команды, так же как это делает точка с запятой.
Примечание
Этот режим реализован для тех, кому он нужен, но это не обязательно означает, что и вам нужно его использовать. В частности, если смешивать в одной строке команды SQL и метакоманды, порядок их выполнения может быть не всегда понятен для неопытного пользователя.
-t
--tuples-only
Отключает вывод имён столбцов и результирующей строки с количеством выбранных записей. Равнозначно команде \t
или \pset tuples_only
.
-T параметры_таблицы
--table-attr=параметры_таблицы
Задаёт атрибуты, которые будут вставлены в тег HTML table
. За подробностями обратитесь к описанию \pset tableattr
.
-U имя_пользователя
--username=имя_пользователя
Использовать для подключения к базе данных имя_пользователя
вместо подразумеваемого по умолчанию. (Разумеется, это потребует соответствующего разрешения.)
-v присвоение
--set=присвоение
--variable=присвоение
Выполняет присвоение значения переменной, как метакоманда \set
. Обратите внимание, что необходимо разделить имя переменной и значение (при наличии) знаком равенства в командной строке. Чтобы сбросить переменную, оставьте имя переменной без знака равенства. Чтобы установить пустое значение, добавьте знак равенства, но опустите значение. Эти присваивания выполняются во время обработки командной строки, так что переменные, отражающие состояние соединения, будут перезаписаны позже.
-V
--version
Выводит версию psql и завершает работу.
-w
--no-password
Не выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл .pgpass
, попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль.
Обратите внимание, что этот параметр действует на протяжении всей сессии и, таким образом, влияет на метакоманду \connect
, так же как и на первую попытку соединения.
-W
--password
Принудительно запрашивать пароль перед подключением к базе данных.
Это несущественный параметр, так как psql запрашивает пароль автоматически, если сервер проверяет подлинность по паролю. Однако, чтобы понять это, psql лишний раз подключается к серверу. Поэтому иногда имеет смысл ввести -W
, чтобы исключить эту ненужную попытку подключения.
Обратите внимание, что этот параметр действует на протяжении всей сессии и, таким образом, влияет на метакоманду \connect
, так же как и на первую попытку соединения.
-x
--expanded
Включает режим развёрнутого вывода таблицы. Равнозначно команде \x
или \pset expanded
.
-X,
--no-psqlrc
Не читать стартовые файлы (ни общесистемный файл psqlrc
, ни пользовательский файл ~/.psqlrc
).
-z
--field-separator-zero
Установить нулевой байт в качестве разделителя полей для невыровненного режима вывода. Равнозначно команде \pset fieldsep_zero
.
-0
--record-separator-zero
Установить нулевой байт в качестве разделителя записей для невыровненного режима вывода. Это полезно при взаимодействии с другими программами, например, с xargs -0
. Равнозначно команде \pset recordsep_zero
.
-1
--single-transaction
Этот параметр может применяться только в сочетании с одним или несколькими параметрами -c
и/или -f
. С ним psql выполняет команду BEGIN
перед обработкой первого такого параметра и COMMIT
после последнего, заворачивая таким образом все команды в одну транзакцию. Это гарантирует, что либо все команды завершатся успешно, либо никакие изменения не сохранятся.
Если в самих этих командах содержатся операторы BEGIN
, COMMIT
или ROLLBACK
, этот параметр не даст желаемого эффекта. Кроме того, если какая-либо отдельная команда не может выполняться внутри блока транзакции, с этим параметром вся транзакция прервётся с ошибкой.
-?
--help[=тема
]
Показать справку по psql и завершиться. Необязательный параметр тема
(по умолчанию options
) выбирает описание интересующей части psql: commands
описывает команды psql с обратной косой чертой; options
описывает параметры командной строки, которые можно передать psql; а variables
выдаёт справку по переменным конфигурации psql.
Не удается подключиться к postgresql через порт 5432
Мне пришлось скомпилировать PostgreSQL 8.1 на Debian Squeeze, потому что я использую Project Open, который основан на OpenACS и не будет работать на более поздних версиях PostgreSQL.
Конфигурация компиляции по умолчанию помещает unix_socket
в систему /tmp
, но проект Open, который основывается на PostgreSQL, не будет работать , так как это выглядит для unix_socket
на /var/run/postgresql
.
Есть настройка, postgresql.conf
чтобы установить местоположение сокета. Моя проблема заключалась в том, что либо я мог установить /tmp
и psql
работать, но не открыть проект, либо я мог установить его /var/run/postgresql
и psql
не работать, но открытие проекта сделало.
Одно из решений этой проблемы состоит в том, чтобы установить сокет для /var/run/postgresql
и затем запустить psql
, основываясь на предложении Питера, как:
psql -h /var/run/postgresql
Это выполняется локально с использованием локальных разрешений. Единственным недостатком является то, что он больше печатает, чем просто «psql».
Другое предложение, которое сделал кто-то, состояло в том, чтобы создать символическую связь между этими двумя местоположениями. Это также сработало, но ссылка исчезла после перезагрузки. Возможно, проще использовать аргумент -h, однако я создал символическую ссылку из скрипта PostgreSQL /etc/init.d
. Я разместил символическую команду создания ссылки в разделе «Пуск». Конечно, когда я запускаю команду остановки и запуска или перезапуска, она будет пытаться воссоздать существующую символическую ссылку, но, кроме предупреждающего сообщения, в этом нет никакого вреда.
В моем случае вместо:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
у меня есть
ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432
и явно установить unix_socket /var/run/postgresql/.s.PGSQL.5432
в postgresql.conf
.
Как безопасно открыть порт PostgreSQL для удаленного доступа?
Этот документ описывает, как открыть порт базы данных PostgreSQL для удаленного доступа, и включает соображения безопасности как для Linux, так и для Windows.
Зачем нужно открывать порт
Вам необходимо открыть удаленный порт, если вы хотите получить доступ к данным в базе данных с клиента, работающего на другом компьютере в сети. То же самое верно, если вы хотите использовать pgAdmin или аналогичные инструменты для разработки SQL.
Проверить IP-адрес порта
Пожалуйста, проверьте, прослушивает ли PostgreSQL публичный порт:
Linux:
# netstat -nlp | grep 5432 tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1272 / postgres tcp6 0 0 :: 1: 5432 ::: * LISTEN 1272 / postgres
Windows:
C: \> netstat -a | grep 5432 TCP 127.0.0.1:5432 tarraco: 0 ПРОСЛУШИВАНИЕ TCP [:: 1]: 5432 tarraco: 0 ПРОСЛУШИВАНИЕ
Результаты выше (включая «127.0.0.1: 5432 «) показывает, что PostgreSQL прослушивает только соединения, исходящие с локального компьютера, поэтому нам придется отредактировать файл конфигурации postgresql.conf. Результат, включающий» 0.0.0.0:5432 «, указывает, что PostgreSQL является уже прослушивает удаленные подключения.
Обычно можно игнорировать строку с «:: 1», поскольку она относится к протоколу IP v6, который используется редко.
Изменить postgresql.conf
Этот файл обычно находится в / var / lib / pgsql / data / в Linux или C: \ PostgreSQL \ data \ в Windows или аналогичных.
В этом файле мы отредактируем параметры listen_address и port, чтобы они выглядели так, как показано ниже:
# ------------------------------------------------ ------------------------------ # ПОДКЛЮЧЕНИЯ И Аутентификация # ------------------------------------------------- ----------------------------- # - Настройки соединения - listen_addresses = '0.0.0.0' # какой IP-адрес (а) слушать; # список адресов, разделенных запятыми; # по умолчанию - localhost; используйте '*' для всех # (изменение требует перезагрузки) порт = 5432 # (для изменения требуется перезагрузка)
Перезапустите PostgreSQL
После этого нам нужно перезапустить PG, чтобы изменения вступили в силу.
В последней системе Linux вы должны войти как пользователь root:
systemctl перезапустить postgresql.service
В Windows вы можете использовать Панель управления -> Администрирование -> Службы и перезапустить службу PostgreSQL. Для] po [служба PostgreSQL называется «] po [PostgreSQL».
Повторив описанный выше шаг «Проверить IP-адрес порта», вы должны увидеть, что IP-адрес порта — «0.0.0.0», что означает, что он будет принимать соединения с любого удаленного компьютера.
Конфигурация аутентификации с использованием pg_hba.conf
pg_hba.conf находится там же, где и postgresql.conf.
Добавьте следующие две строки в конец файла:
хост все все 0.0.0.0/0 md5 разместить все все :: / 0 md5
Это означает, что удаленный доступ разрешен с использованием IP v4 и IP v6 для всех баз данных и всех пользователей, использующих протокол аутентификации «md5».
Пожалуйста, перезапустите postgresql еще раз.
Открытый порт межсетевого экрана Linux
Работает ли ваша база данных PostgreSQL на сервере Linux с включенным брандмауэром (например, [[https://sourceforge.net/projects/project-open/files/project-open/V5.0/|CentOS 7]] project-open [виртуальное устройство]])?
В этом случае придется протыкать дыру (как root):
# firewall-cmd --zone = public --add-port = 5432 / tcp --permanent успех # firewall-cmd --reload успех
Открыть порт брандмауэра Windows
Ваша база данных PostgreSQL работает на сервере Windows с включенным брандмауэром?
В этом случае вы можете просто отключить брандмауэр для первой проверки в Панели управления -> Системы и безопасность -> Брандмауэр Windows -> Включить или выключить брандмауэр Windows.
В качестве альтернативы вы можете перейти в Панель управления -> Системы и безопасность -> Брандмауэр Windows -> Разрешить программу или функцию через брандмауэр Windows -> Расширенные настройки -> Новое правило:
- Тип правила: Порт
- TCP или UDP: TCP
- Определенные локальные порты: 5432
- Действие: Разрешить подключение
- Когда применяется это правило: Доменное, Частное и Общедоступное (все три отмечены)
- Имя: «Входящие PostgreSQL»
Установка паролей PostgreSQL
Чтобы установить пароль PostgreSQL для пользователя projop (или любого другого пользователя…) вам необходимо подключиться к базе данных локально, используя учетную запись с правами администратора.
В] открытом проекте [виртуальное устройство Centos 7 просто введите «psql» в локальном окне терминала, запущенном от имени пользователя «projop».
Затем введите следующую команду SQL:
изменить проект пользователя с паролем "секрет";
Проверка соединения через «psql»
Теперь у вас должна быть возможность подключиться к серверу с помощью стандартного клиента PostgreSQL «psql», инструмента администрирования PG pgAdmin или любого другого приложения с интерфейсом PostgreSQL.Мы проверим с помощью инструмента командной строки «psql» на удаленном компьютере:
psql -h-U projop
В результате вы должны увидеть «Пароль для пользователя projop». Это означает, что порт открыт и активен.
Затем введите «секретный» пароль, указанный выше.
Сообщение об ошибке типа «psql: не удалось подключиться к серверу: нет маршрута к хосту. Работает ли сервер на хосте« 192.168.0.10 »и принимает соединения TCP / IP через порт 5432?» указывает, что некоторые из вышеперечисленных шагов не сработали.
.
postgresql — изменить порт pgsql
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
postgresql — конфигурация Postgres.app (порт и другие параметры)
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
ssh — не удается подключиться к Postgresql через порт 5432
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.