使用psql时如何在postgres中选择模式?

时间:2015-12-04 22:10:14

标签: postgresql psql

我有一个包含多个模式的postgres数据库。当我从具有psql的shell连接到数据库并运行\dt时,它使用默认的连接模式 public 。是否有我可以指定的标志或如何更改架构?

9 个答案:

答案 0 :(得分:113)

在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

答案 1 :(得分:59)

您想更改数据库吗?

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

更新

我再读一遍你的问题。 显示模式

\dn - list of schemas

要更改架构,您可以尝试

SET search_path TO

答案 2 :(得分:21)

在psql命令中使用带有句点的模式名称来获取有关此模式的信息。

设定:

public class Taxi(){
    public static void main(String[] args){

        CountDTO countDTO = new CountDTO();

        if(noCarAvailable()){
            countDTO.setErrors(countDTO.getErrors()++); //DOING INCREMENT HERE
        }else(){
            TaxiService taxiService = new TaxiServiceImpl();
            taxiService.start();
        }
    }
}

显示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

等...

答案 3 :(得分:10)

这是旧的,但我将导出放在我的别名中以连接到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"

答案 4 :(得分:10)

如果你在 psql 中输入

set schema 'temp';

然后\d显示“temp

中的所有关系

答案 5 :(得分:8)

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

答案 6 :(得分:2)

关键词:

SET search_path TO

示例:

SET search_path TO your_schema_name;

答案 7 :(得分:2)

快速解决方案可能是:

SELECT your_db_column_name from "your_db_schema_name"."your_db_tabel_name";

答案 8 :(得分:-1)

如果在docker exec中与psql一起玩,就像这样:

docker exec -e "PGOPTIONS=--search_path=<your_schema>" -it docker_pg psql -U user db_name