Como alternar bancos de dados no psql?

1082

No MySQL , eu useiuse database_name;

Qual é o psqlequivalente?

Blankman
fonte
1
OK, então trata-se psqldo front-end do PostgreSQL?
Peter Mortensen

Respostas:

1656

No PostgreSQL, você pode usar o \connectmeta-comando da ferramenta cliente psql:

\connect DBNAME

ou em resumo:

\c DBNAME
Will Hartung
fonte
126
+1: Este é APENAS um comando psql, no próprio Postgres, não há como "alternar". De fato, o psql não está "alternando" no contexto do MySQL, apenas fechando uma conexão e abrindo outra.
Rfusca 17/10/10
12
Portanto, não há chance de fazer isso com SQL?
Borys
5
Então, isso pode funcionar entre instruções SQL em um .sqlarquivo? por exemplo, posso ter CREATE DATABASE mydb;seguido \connect mydb?
J86
1
@ Ciwan Tenho certeza que você não pode incluir psqlcomandos em um arquivo de script SQL.
precisa saber é o seguinte
183

Você pode se conectar a um banco de dados com \c <database>ou \connect <database>.

magro
fonte
98

No prompt do PSQL, você pode:

\connect (or \c) dbname
Michael Goldshteyn
fonte
31

Você pode selecionar o banco de dados ao conectar-se ao psql. Isso é útil ao usá-lo em um script:

sudo -u postgres psql -c "CREATE SCHEMA test AUTHORIZATION test;" test
Manel Clos
fonte
4
Obrigado, eu estava ficando louco ... :)
Richard
10

\lpara bancos de dados \cDatabaseName para alternar para db \dfpara procedimentos armazenados em determinado banco de dados

Ambrish Rajput
fonte
9

Usando o meta-comando do psql \c or \connect [ dbname [ username ] [ host ] [ port ] ] | conninfo(consulte a documentação ).

Exemplo: \c MyDatabase

Observe que os comandos \ce \connectmeta diferenciam maiúsculas de minúsculas .

Franck Dernoncourt
fonte
7

Use a instrução abaixo para alternar para diferentes bancos de dados que residem dentro do RDMS do postgreSQL

\c databaseName
Bilal Mahmood
fonte
1

Se você deseja alternar para um banco de dados específico na inicialização, tente

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

Por padrão, o Postgres é executado na porta 5432. Se for executado em outro, certifique-se de passar a porta na linha de comando.

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

Por um alias simples, podemos torná-lo útil.

Crie um alias no seu .bashrcou.bash_profile

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

Executar psqlna linha de comando, ele alternará para o banco de dados padrão; psql anotherdb, ele alternará para o banco de dados com o nome no argumento, na inicialização.

Vignesh Raja
fonte
1

Embora não seja explicitamente declarado na pergunta, o objetivo é conectar-se a um esquema / banco de dados específico.

Outra opção é conectar-se diretamente ao esquema. Exemplo:

sudo -u postgres psql -d my_database_name

Fonte 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.
AlikElzin-kilaka
fonte
1

Você também pode se conectar a um banco de dados com um ROLE diferente, da seguinte maneira.

\connect DBNAME ROLENAME;

ou

\c DBNAME ROLENAME;
Abhishek
fonte
0

Você pode se conectar usando

\ c dbname

Se você deseja ver todos os comandos possíveis para POSTGRESQL ou SQL, siga estas etapas:

  1. rails dbconsole (Você redirecionará para o seu banco de dados ENV atual)

  2. \? (Para comandos POSTGRESQL)

ou

  1. \ h (para comandos SQL)

  2. Pressione Q para sair

Lakhani Aliraza
fonte
-11

Conforme mencionado nas outras respostas, você precisa alterar a conexão para usar um banco de dados diferente.

O Postgres trabalha com esquemas. Você pode ter vários esquemas em um único banco de dados. Portanto, se você estiver trabalhando no mesmo banco de dados e quiser alterar o esquema, faça o seguinte:

SET SCHEMA 'schema_name';

user3545770
fonte
9
Isto está errado. Isso mudará apenas o esquema usado no caminho de pesquisa. Um banco de dados contém vários esquemas ta.
Todos os trabalhadores são essenciais
@cpburnz Concordo com você #
MangEngkus
1
Além do comentário de @ cpburnz, SET SCHEMAé usado como SET SCHEMA 'schema_name'não SET SCHEMA 'database_name'. Portanto, esta é uma maneira SQL de alterar o esquema e não o banco de dados. Também isso é semelhante a SET search_path TO schema_name. Veja a documentação aqui ou aqui .
Ibrahim Dauda