Ho un database Postgres con più schemi. Quando mi collego al database da una shell con psql
ed eseguo \dt
, utilizza lo schema di connessione predefinito che è pubblico . C'è un flag che posso specificare o come posso cambiare lo schema?
Ho un database Postgres con più schemi. Quando mi collego al database da una shell con psql
ed eseguo \dt
, utilizza lo schema di connessione predefinito che è pubblico . C'è un flag che posso specificare o come posso cambiare lo schema?
Risposte:
In PostgreSQL il sistema determina quale tabella si intende seguendo un percorso di ricerca, che è un elenco di schemi in cui cercare.
La prima tabella di corrispondenza nel percorso di ricerca viene considerata quella desiderata, altrimenti, se non viene rilevata alcuna corrispondenza, viene generato un errore, anche se esistono nomi di tabella di corrispondenza in altri schemi nel database.
Per mostrare il percorso di ricerca corrente è possibile utilizzare il seguente comando:
SHOW search_path;
E per inserire il nuovo schema nel percorso, è possibile utilizzare:
SET search_path TO myschema;
O se vuoi più schemi:
SET search_path TO myschema, public;
Riferimento: https://www.postgresql.org/docs/current/static/ddl-schemas.html
Vuoi cambiare il database?
\l - to display databases
\c - connect to new database
Aggiornare.
Ho letto di nuovo la tua domanda. Per visualizzare schemi
\dn - list of schemas
Per modificare lo schema, puoi provare
SET search_path TO
\l - Display database
\c - Connect to database
\dn - List schemas
\dt - List tables inside public schemas
\dt schema1. - List tables inside particular schemas. For eg: 'schema1'.
Utilizzare il nome dello schema con punto nel comando psql per ottenere informazioni su questo schema.
Impostare:
test=# create schema test_schema;
CREATE SCHEMA
test=# create table test_schema.test_table (id int);
CREATE TABLE
test=# create table test_schema.test_table_2 (id int);
CREATE TABLE
Mostra l'elenco delle relazioni in test_schema
:
test=# \dt test_schema.
List of relations
Schema | Name | Type | Owner
-------------+--------------+-------+----------
test_schema | test_table | table | postgres
test_schema | test_table_2 | table | postgres
(2 rows)
Mostra test_schema.test_table
definizione:
test=# \d test_schema.test_table
Table "test_schema.test_table"
Column | Type | Modifiers
--------+---------+-----------
id | integer |
Mostra tutti i tavoli in test_schema
:
test=# \d test_schema.
Table "test_schema.test_table"
Column | Type | Modifiers
--------+---------+-----------
id | integer |
Table "test_schema.test_table_2"
Column | Type | Modifiers
--------+---------+-----------
id | integer |
eccetera...
Questo è vecchio, ma ho inserito le esportazioni nel mio alias per la connessione al db:
alias schema_one.con="PGOPTIONS='--search_path=schema_one' psql -h host -U user -d database etc"
E per un altro schema:
alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h host -U user -d database etc"
export
e il punto e virgola nei tuoi alias. In questo modo PGOPTIONS
non rimane in giro dopo aver lasciato psql.
SET search_path
a ogni singola query. grazie!
parola chiave :
SET search_path TO
esempio :
SET search_path TO your_schema_name;