2015-12-04 25 views
34

Mam bazę danych postgres z wieloma schematami. Po połączeniu się z bazą danych za pomocą powłoki psql i uruchamiam \dt, używa ona domyślnego schematu połączenia, którym jest publiczny. Czy istnieje flaga, którą mogę określić lub jak zmienić schemat?Jak wybrać schemat w postgresie podczas używania psql?

+0

Rozważ: http://stackoverflow.com/questions/9067335/how-does-the-search-path-influence-identifier-resolution-and-the-current-schema/9067777#9067777 –

Odpowiedz

17

Czy chcesz zmienić bazę danych?

\l - to display databases 
\c - connect to new database 

Aktualizacja.

Znów przeczytałem twoje pytanie. Aby wyświetlić schematów

\dn - list of schemas 

Aby zmienić schemat, można spróbować

SET search_path TO 
40

W PostgreSQL system określa, która tabela jest przeznaczona wykonując ścieżkę przeszukiwania, który jest lista schematów, aby spojrzeć w.

Pierwsza zgodna tabela w ścieżce wyszukiwania jest uważana za pożądaną, w przeciwnym razie, jeśli nie ma zgodności, powstaje błąd, nawet jeśli pasujące nazwy tabel istnieją w innych schematach w bazie danych.

Aby wyświetlić bieżącą ścieżkę przeszukiwania można użyć następującego polecenia:

SHOW search_path; 

i wprowadzenia nowego schematu w ścieżce, można użyć:

SET search_path TO myschema; 

Albo jeśli chcesz wielokrotność schematy:

SET search_path TO myschema, public; 

referencyjny: https://www.postgresql.org/docs/current/static/ddl-schemas.html

11

Użyj nazwy schematu z kropką w komendzie psql, aby uzyskać informacje o tym schemacie.

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 

Pokaż listę stosunków w 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) 

Pokaż test_schema.test_table definicja:

test=# \d test_schema.test_table 
Table "test_schema.test_table" 
Column | Type | Modifiers 
--------+---------+----------- 
id  | integer | 

Pokaż wszystkie tabele w 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 | 

itp ...

+4

Brakowało okresu after \ dt test_schema. co skutkuje "brakiem znalezionej wiadomości" Dzięki za przykłady, znacznie ułatwiłem :) – mehany

1

To jest stary, ale kładę eksportu w moim alias do podłączenia do DB:

alias schema_one.con="PGOPTIONS='--search_path=schema_one' psql -h host -U user -d database etc' 

A dla innego schematu:

alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h host -U user -d database etc' 
+0

Fajny pomysł. Pominąłbym 'export' i średnik w twoich aliasach. W ten sposób 'PGOPTIONS' nie pozostaje w pobliżu po opuszczeniu psql. –

+0

@DoronGold świetny punkt, aktualizowanie odpowiedzi. Dzięki – techbrownbags

0

Słowo kluczowe:

SET search_path TO 

przykład:

SET search_path TO your_schema_name;