psql을 사용할 때 postgres에서 스키마를 선택하는 방법은 무엇입니까?


151

여러 스키마가있는 postgres 데이터베이스가 있습니다. 셸에서 데이터베이스에 연결하고 psql실행할 \dtpublic 인 기본 연결 스키마를 사용합니다 . 지정할 수있는 플래그가 있거나 스키마를 어떻게 변경할 수 있습니까?


답변:


197

PostgreSQL에서 시스템은 검색 할 스키마를 찾는 검색 경로를 따라 의미하는 테이블을 결정합니다.

검색 경로의 첫 번째 일치 테이블은 원하는 것으로 간주됩니다. 그렇지 않으면 일치하는 테이블 이름이 데이터베이스의 다른 스키마에 존재하더라도 일치하는 것이 없으면 오류가 발생합니다.

현재 검색 경로를 표시하려면 다음 명령을 사용할 수 있습니다.

SHOW search_path;

그리고 새로운 스키마를 경로에 넣으려면 다음을 사용할 수 있습니다.

SET search_path TO myschema;

또는 여러 스키마를 원할 경우 :

SET search_path TO myschema, public;

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


77

데이터베이스를 변경 하시겠습니까?

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

최신 정보.

나는 당신의 질문을 다시 읽었습니다. 스키마를 표시하려면

\dn - list of schemas

스키마를 변경하려면 시도해 볼 수 있습니다

SET search_path TO

1
psql에서 이것을하지 않는 방법. "연결하는"방법
mathtick

46
\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'.

16
(모하메드을 감사합니다!) 나 스키마 이름 : 이후의 기간에 대해 잊고처럼하지 말라
anapaulagomes

1
이것은 질문에 대답하지 않습니다. 그는 기본 스키마를 변경하는 방법을 물었습니다. psql의 기본 명령이 아닙니다.
Kenny Steegmans

27

psql 명령에서 마침표와 함께 스키마 이름을 사용하여이 스키마에 대한 정보를 얻으십시오.

설정:

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

관계 목록 표시 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)

test_schema.test_table정의 표시 :

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

모든 테이블 표시 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 | 

기타...


6
\ dt test_schema 이후의 기간이 누락되었습니다. , 예 주셔서 감사합니다 "아무 관계가 메시지를 찾을 수 없습니다"에서 어떤 결과를 만들어 훨씬 쉽게 :)
mehany

14

이것은 오래되었지만 db에 연결하기 위해 별칭에 내보내기를 넣었습니다.

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

그리고 다른 스키마의 경우 :

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

2
좋은 생각. export별칭과 세미콜론 은 생략 합니다. 이 방법 PGOPTIONS은 psql을 떠난 후에도 유지되지 않습니다.
Doron Gold

이것은 SET search_path모든 단일 쿼리에를 추가하는 것보다 훨씬 실용적인 좋은 아이디어 입니다. 감사합니다!
hraban


4

빠른 해결책은 다음과 같습니다.

SELECT your_db_column_name from "your_db_schema_name"."your_db_tabel_name";

0

docker exec에서 psql을 사용하면 다음과 같이됩니다.

docker exec -e "PGOPTIONS=--search_path=<your_schema>" -it docker_pg psql -U user db_name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.