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