Mam bazę danych postgres z wieloma schematami. Kiedy łączę się z bazą danych z powłoki psql
i uruchamiam \dt
, używa ona domyślnego schematu połączenia, który jest publiczny . Czy istnieje flaga, którą mogę określić lub jak mogę zmienić schemat?
Mam bazę danych postgres z wieloma schematami. Kiedy łączę się z bazą danych z powłoki psql
i uruchamiam \dt
, używa ona domyślnego schematu połączenia, który jest publiczny . Czy istnieje flaga, którą mogę określić lub jak mogę zmienić schemat?
Odpowiedzi:
W PostgreSQL system określa, którą tabelę rozumiemy, podążając ścieżką wyszukiwania, czyli listą schematów do przeszukania.
Pierwsza pasująca tabela w ścieżce wyszukiwania jest traktowana jako ta, której szukano, w przeciwnym razie, jeśli nie ma dopasowania, generowany jest błąd, nawet jeśli pasujące nazwy tabel istnieją w innych schematach w bazie danych.
Aby wyświetlić aktualną ścieżkę wyszukiwania, możesz użyć następującego polecenia:
SHOW search_path;
Aby umieścić nowy schemat na ścieżce, możesz użyć:
SET search_path TO myschema;
Lub jeśli chcesz mieć wiele schematów:
SET search_path TO myschema, public;
Źródła: https://www.postgresql.org/docs/current/static/ddl-schemas.html
Chcesz zmienić bazę danych?
\l - to display databases
\c - connect to new database
Aktualizacja.
Przeczytałem ponownie twoje pytanie. Aby wyświetlić schematy
\dn - list of schemas
Aby zmienić schemat, możesz spróbować
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'.
Użyj nazwy schematu z kropką w komendzie psql, aby uzyskać informacje o tym schemacie.
Ustawiać:
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ę relacji 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
definicję:
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...
To jest stare, ale umieściłem eksport w moim aliasie do łączenia się z bazą danych:
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"
export
i średnik w twoich aliasach. W ten sposób PGOPTIONS
nie pozostaje po wyjściu z psql.
SET search_path
do każdego zapytania. Dziękuję Ci!
słowo kluczowe:
SET search_path TO
przykład:
SET search_path TO your_schema_name;