Как переключить базы данных в psql?


Ответы:


1656

В PostgreSQL вы можете использовать \connectмета-команду клиентского инструмента psql:

\connect DBNAME

или короче говоря:

\c DBNAME

126
+1: это просто команда psql, в самом Postgres нет способа «переключиться». Фактически, psql не «переключается» в контексте MySQL, просто закрывает одно соединение и открывает другое.
rfusca

12
Так что нет шансов сделать это с SQL?
Борис

5
Так может ли это работать среди операторов SQL в .sqlфайле? например, могу ли я CREATE DATABASE mydb;следовать \connect mydb?
J86

1
@Ciwan Я уверен, что вы не можете включать psqlкоманды в файл сценария SQL.
Кенни Эвитт

183

Вы можете подключиться к базе данных с помощью \c <database>или \connect <database>.



31

Вы можете выбрать базу данных при соединении с PSQL. Это удобно при использовании из скрипта:

sudo -u postgres psql -c "CREATE SCHEMA test AUTHORIZATION test;" test

4
Спасибо, я схожу с ума ... :)
Ричард

10

\lдля баз данных \cDatabaseName для переключения на дБ \dfдля процедур, хранящихся в конкретной базе данных



7

Используйте оператор ниже для переключения на разные базы данных, находящиеся в вашей RDMS postgreSQL

\c databaseName

1

Если вы хотите при запуске переключиться на конкретную базу данных, попробуйте

/Applications/Postgres.app/Contents/Versions/9.5/bin/psql vigneshdb;

По умолчанию Postgres работает на порту 5432. Если он работает на другом, обязательно передайте порт в командной строке.

/Applications/Postgres.app/Contents/Versions/9.5/bin/psql -p2345 vigneshdb;

Простым псевдонимом мы можем сделать это удобным.

Создайте псевдоним в вашем .bashrcили.bash_profile

function psql()
{
    db=vigneshdb
    if [ "$1" != ""]; then
            db=$1
    fi
    /Applications/Postgres.app/Contents/Versions/9.5/bin/psql -p5432 $1
}

Запустите psqlв командной строке, он переключится на базу данных по умолчанию; psql anotherdb, он переключится на БД с именем в аргументе при запуске.


1

Хотя это явно не указано в вопросе, цель состоит в том, чтобы подключиться к определенной схеме / базе данных.

Другой вариант - напрямую подключиться к схеме. Пример:

sudo -u postgres psql -d my_database_name

Источник от man psql:

-d dbname
--dbname=dbname
   Specifies the name of the database to connect to. This is equivalent to specifying dbname as the first non-option argument on the command line.

   If this parameter contains an = sign or starts with a valid URI prefix (postgresql:// or postgres://), it is treated as a conninfo string. See Section 31.1.1, Connection Strings”, in the
   documentation for more information.

1

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

\connect DBNAME ROLENAME;

или

\c DBNAME ROLENAME;

0

Вы можете подключиться с помощью

\ c dbname

Если вы хотите увидеть все возможные команды для POSTGRESQL или SQL, выполните следующие действия:

  1. rails dbconsole (Вы будете перенаправлены в вашу текущую базу данных ENV)

  2. \? (Для команд POSTGRESQL)

или

  1. \ h (для команд SQL)

  2. Нажмите Q для выхода


-11

Как уже упоминалось в других ответах, вам нужно изменить соединение, чтобы использовать другую базу данных.

Postgres работает со схемами. Вы можете иметь несколько схем в одной базе данных. Итак, если вы работаете в одной базе данных и хотите изменить схему, вы можете сделать:

SET SCHEMA 'schema_name';


9
Это не верно. Это только изменит схему, используемую в пути поиска. База данных содержат несколько схем тех.
Все работники

@cpburnz Я согласен с вами
MangEngkus

1
В дополнение к комментарию @ cpburnz, SET SCHEMAиспользуется как SET SCHEMA 'schema_name'нет SET SCHEMA 'database_name'. Так что это способ SQL изменить схему, а не базу данных. Также это похоже на SET search_path TO schema_name. Смотрите документацию здесь или здесь .
Ибрагим Дауда
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.