Como alternar bancos de dados no psql?


Respostas:


1656

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

\connect DBNAME

ou em resumo:

\c DBNAME

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>.



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

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



7

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

\c databaseName

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.


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.

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;

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


-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';


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.