Jak przełączać bazy danych w psql?


Odpowiedzi:


1655

W PostgreSQL możesz użyć \connectmeta-polecenia narzędzia klienta psql:

\connect DBNAME

lub w skrócie:

\c DBNAME

126
+1: Jest to po prostu polecenie psql, w samym Postgresie nie ma możliwości „przełączenia”. W rzeczywistości psql nie „przełącza się” w kontekście MySQL, tylko zamyka jedno połączenie i otwiera drugie.
rfusca

12
Więc nie ma szans na zrobienie tego z SQL?
Borys

5
Czy to może działać wśród instrukcji SQL w .sqlpliku? np. czy mogłem CREATE DATABASE mydb;śledzić \connect mydb?
J86

1
@Ciwan Jestem pewien, że nie możesz dołączyć psqlpoleceń do pliku skryptu SQL.
Kenny Evitt,

183

Możesz połączyć się z bazą danych za pomocą \c <database>lub \connect <database>.



31

Możesz wybrać bazę danych podczas łączenia z psql. Jest to przydatne, gdy używasz go ze skryptu:

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

4
Dzięki, byłem szalony ... :)
Richard,

10

\ldla baz danych \cDatabaseName, aby przełączyć na db \dfdla procedur przechowywanych w konkretnej bazie danych



7

Użyj poniższej instrukcji, aby przełączyć się do różnych baz danych znajdujących się w twoim RDG postgreSQL

\c databaseName

1

Jeśli chcesz przejść do określonej bazy danych podczas uruchamiania, spróbuj

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

Domyślnie Postgres działa na porcie 5432. Jeśli działa na innym, pamiętaj, aby przekazać port w wierszu poleceń.

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

Za pomocą prostego aliasu możemy to zrobić.

Utwórz alias w swoim .bashrclub.bash_profile

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

Uruchom psqlw linii poleceń, przełączy się na domyślną bazę danych; psql anotherdb, przełączy się na db o nazwie w argumencie podczas uruchamiania.


1

Chociaż nie zostało to wyraźnie określone w pytaniu, celem jest połączenie się z określonym schematem / bazą danych.

Inną opcją jest bezpośrednie połączenie ze schematem. Przykład:

sudo -u postgres psql -d my_database_name

Źródło z 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

Możesz także połączyć się z bazą danych z inną ROLĄ w następujący sposób.

\connect DBNAME ROLENAME;

lub

\c DBNAME ROLENAME;

0

Możesz połączyć za pomocą

\ c nazwa_db

Jeśli chcesz zobaczyć wszystkie możliwe polecenia POSTGRESQL lub SQL, wykonaj następujące kroki:

  1. rails dbconsole (nastąpi przekierowanie do bieżącej bazy danych ENV)

  2. \? (Dla poleceń POSTGRESQL)

lub

  1. \ h (dla poleceń SQL)

  2. Naciśnij Q, aby wyjść


-11

Jak wspomniano w innych odpowiedziach, musisz zmienić połączenie, aby użyć innej bazy danych.

Postgres działa ze schematami. Możesz mieć wiele schematów w jednej bazie danych. Jeśli więc pracujesz w tej samej bazie danych i chcesz zmienić schemat, możesz:

SET SCHEMA 'schema_name';


9
To jest źle. Spowoduje to jedynie zmianę schematu używanego na ścieżce wyszukiwania. Baza danych zawiera wiele schematów TA.
Wszyscy pracownicy są niezbędni

@cpburnz Zgadzam się z tobą
MangEngkus

1
Oprócz komentarza @ cpburnz SET SCHEMAjest używany jako SET SCHEMA 'schema_name'nie SET SCHEMA 'database_name'. Jest to więc sposób SQL na zmianę schematu, a nie bazy danych. Również to jest podobne do SET search_path TO schema_name. Zobacz dokumentację tutaj lub tutaj .
Ibrahim Dauda,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.