使用psql时如何在postgres中选择架构?


Answers:


196

在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的基本命令。
肯尼·斯蒂格曼斯

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 2015年

14

这很旧,但是我将导出文件放在别名中以连接到数据库:

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之后,这种方法就不会存在。
多伦·金

这是一个好主意,比向SET search_path每个查询添加a更为实用。谢谢!
hraban

6

关键字:

SET search_path TO

例如:

SET search_path TO your_schema_name;

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.