Ho un database postgres con più schemi. Quando mi collego al database da una shell con psql
e eseguo \dt
utilizza lo schema di connessione predefinito che è pubblico. C'è una bandiera che posso specificare o come posso cambiare lo schema?Come selezionare uno schema in postgres quando si usa psql?
risposta
Vuoi modificare il database?
\l - to display databases
\c - connect to new database
Aggiornamento
.
Ho letto di nuovo la tua domanda. Per visualizzare schemi
\dn - list of schemas
Per cambiare schema, si può provare
SET search_path TO
in PostgreSQL il sistema determina quale tabella si intende per a seguito di un percorso di ricerca, che è una lista di schemi a guardare in.
La prima tabella di corrispondenza nel percorso di ricerca è considerata quella desiderata, altrimenti, se non vi è corrispondenza, viene generato un errore, anche se i nomi di tabelle corrispondenti esistono in altri schemi nel database.
Per mostrare il percorso di ricerca corrente è possibile utilizzare il seguente comando:
SHOW search_path;
E per mettere il nuovo schema nel percorso, è possibile utilizzare:
SET search_path TO myschema;
Oppure, se si vuole di più schemi:
SET search_path TO myschema, public;
Riferimento: https://www.postgresql.org/docs/current/static/ddl-schemas.html
Utilizzare il nome dello schema con punto nel comando psql per ottenere informazioni su questo schema.
Setup:
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 elenco di 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 tutte le tabelle 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 |
ecc ...
Mi mancava il periodo dopo \ dt test_schema. che risulta in "nessun messaggio trovato" Grazie per gli esempi, ha reso molto più facile :) – mehany
Questo è vecchio, ma ho messo 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'
Bella idea. Eviterò 'export' e il punto e virgola nei tuoi alias. In questo modo 'PGOPTIONS' non rimane in giro dopo aver lasciato psql. –
@DoronGold ottimo punto, aggiornamento della risposta. Grazie – techbrownbags
parola chiave:
SET search_path TO
esempio:
SET search_path TO your_schema_name;
Considera: http://stackoverflow.com/questions/9067335/how-does-the-search-path-influence-identifier-resolution-and-the-current-schema/9067777#9067777 –