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?
Odpowiedz
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
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
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 ...
Brakowało okresu after \ dt test_schema. co skutkuje "brakiem znalezionej wiadomości" Dzięki za przykłady, znacznie ułatwiłem :) – mehany
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'
Fajny pomysł. Pominąłbym 'export' i średnik w twoich aliasach. W ten sposób 'PGOPTIONS' nie pozostaje w pobliżu po opuszczeniu psql. –
@DoronGold świetny punkt, aktualizowanie odpowiedzi. Dzięki – techbrownbags
Słowo kluczowe:
SET search_path TO
przykład:
SET search_path TO your_schema_name;
Rozważ: http://stackoverflow.com/questions/9067335/how-does-the-search-path-influence-identifier-resolution-and-the-current-schema/9067777#9067777 –