¿Cómo cambiar bases de datos en psql?


Respuestas:


1656

En PostgreSQL, puede usar el \connectmetacomando de la herramienta de cliente psql:

\connect DBNAME

o en resumen:

\c DBNAME

126
+1: Esto es SOLO un comando psql, en Postgres, no hay forma de "cambiar". De hecho, psql no se "cambia" en el contexto de MySQL, solo cierra una conexión y abre otra.
rfusca

12
Entonces, ¿no hay posibilidad de hacerlo con SQL?
Borys

55
Entonces, ¿esto puede funcionar entre las declaraciones SQL en un .sqlarchivo? por ejemplo, ¿puedo haber CREATE DATABASE mydb;seguido por \connect mydb?
J86

1
@Ciwan Estoy bastante seguro de que no puede incluir psqlcomandos en un archivo de script SQL.
Kenny Evitt

183

Puede conectarse a una base de datos con \c <database>o \connect <database>.



31

Puede seleccionar la base de datos cuando se conecta con psql. Esto es útil cuando se usa desde un script:

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

44
Gracias, me estaba volviendo loco ... :)
Richard

10

\lpara bases de datos \cDatabaseName para cambiar a db \dfpara procedimientos almacenados en una base de datos particular



7

Use la siguiente declaración para cambiar a diferentes bases de datos que residen dentro de su RDMS postgreSQL

\c databaseName

1

Si desea cambiar a una base de datos específica al inicio, intente

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

Por defecto, Postgres se ejecuta en el puerto 5432. Si se ejecuta en otro, asegúrese de pasar el puerto en la línea de comando.

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

Por un simple alias, podemos hacerlo útil.

Crea un alias en tu .bashrco.bash_profile

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

Ejecutar psqlen línea de comando, cambiará a la base de datos predeterminada; psql anotherdb, cambiará a la base de datos con el nombre en argumento, en el inicio.


1

Aunque no se menciona explícitamente en la pregunta, el propósito es conectarse a un esquema / base de datos específico.

Otra opción es conectarse directamente al esquema. Ejemplo:

sudo -u postgres psql -d my_database_name

Fuente de 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

También puede conectarse a una base de datos con un PAPEL diferente de la siguiente manera.

\connect DBNAME ROLENAME;

o

\c DBNAME ROLENAME;

0

Puedes conectarte usando

\ c nombrebd

Si desea ver todos los comandos posibles para POSTGRESQL o SQL, siga estos pasos:

  1. rails dbconsole (volverá a ingresar a su base de datos ENV actual)

  2. \? (Para comandos POSTGRESQL)

o

  1. \ h (para comandos SQL)

  2. Presione Q para salir


-11

Como se menciona en las otras respuestas, debe cambiar la conexión para usar una base de datos diferente.

Postgres trabaja con esquemas. Puede tener múltiples esquemas en una sola base de datos. Entonces, si está trabajando dentro de la misma base de datos y desea cambiar el esquema, puede hacer lo siguiente:

SET SCHEMA 'schema_name';


99
Esto está mal. Esto solo cambiará el esquema utilizado en la ruta de búsqueda. Una base de datos contiene múltiples esquemas ta.
Todos los trabajadores son esenciales

@cpburnz Estoy de acuerdo contigo
MangEngkus

1
Además del comentario de @ cpburnz, SET SCHEMAse usa como SET SCHEMA 'schema_name'no SET SCHEMA 'database_name'. Entonces, esta es una forma SQL de cambiar el esquema, no la base de datos. También esto es similar a SET search_path TO schema_name. Ver documentación aquí o aquí .
Ibrahim Dauda
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.