Come cambiare database in psql?


Risposte:


1656

In PostgreSQL, puoi usare il \connectmeta-comando dello strumento client psql:

\connect DBNAME

o in breve:

\c DBNAME

126
+1: Questo è SOLO un comando psql, in Postgres stesso, non c'è modo di "cambiare". In effetti, psql non sta "cambiando" nel contesto di MySQL, sta semplicemente chiudendo una connessione e aprendone un'altra.
rfusca,

12
Quindi non c'è possibilità di farlo con SQL?
Borys,

5
Quindi può funzionare tra istruzioni SQL in un .sqlfile? ad esempio posso aver CREATE DATABASE mydb;seguito \connect mydb?
J86,

1
@Ciwan Sono abbastanza sicuro che non puoi includere psqlcomandi in un file di script SQL.
Kenny Evitt,

183

È possibile connettersi a un database con \c <database>o \connect <database>.



31

È possibile selezionare il database durante la connessione con psql. Questo è utile quando lo si utilizza da uno script:

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

4
Grazie, stavo diventando pazzo ... :)
Richard

10

\lper database \cDatabaseName per passare a db \dfper le procedure memorizzate in un determinato database



7

Usa la seguente istruzione per passare a diversi database residenti nel tuo RDMS postgreSQL

\c databaseName

1

Se si desidera passare a un database specifico all'avvio, provare

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

Per impostazione predefinita, Postgres viene eseguito sulla porta 5432. Se viene eseguito su un altro, assicurarsi di passare la porta nella riga di comando.

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

Con un semplice alias, possiamo renderlo utile.

Crea un alias nel tuo .bashrco.bash_profile

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

Esegui psqldalla riga di comando, passerà al database predefinito; psql anotherdb, passerà al db con il nome nell'argomento, all'avvio.


1

Sebbene non sia esplicitamente indicato nella domanda, lo scopo è connettersi a uno schema / database specifico.

Un'altra opzione è quella di connettersi direttamente allo schema. Esempio:

sudo -u postgres psql -d my_database_name

Fonte da 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

È inoltre possibile connettersi a un database con un RUOLO diverso come segue.

\connect DBNAME ROLENAME;

o

\c DBNAME ROLENAME;

0

Puoi connetterti usando

\ c dbname

Se vuoi vedere tutti i possibili comandi per POSTGRESQL o SQL segui questi passaggi:

  1. rails dbconsole (Verrai ridistribuito nel tuo database ENV corrente)

  2. \? (Per i comandi POSTGRESQL)

o

  1. \ h (per comandi SQL)

  2. Premi Q per uscire


-11

Come indicato nelle altre risposte, è necessario modificare la connessione per utilizzare un database diverso.

Postgres funziona con gli schemi. Puoi avere più schemi in un unico database. Pertanto, se si lavora all'interno dello stesso database e si desidera modificare lo schema, è possibile:

SET SCHEMA 'schema_name';


9
Questo è sbagliato. Questo cambierà solo lo schema utilizzato nel percorso di ricerca. Un database contiene più schemi ta.
Tutti i lavoratori sono essenziali il

@cpburnz Sono d'accordo con te
MangEngkus,

1
Oltre al commento di @ cpburnz, SET SCHEMAviene utilizzato comeSET SCHEMA 'schema_name' no SET SCHEMA 'database_name'. Quindi questo è un modo SQL per cambiare lo schema non il database. Anche questo è simile a SET search_path TO schema_name. Vedi la documentazione qui o qui .
Ibrahim Dauda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.