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

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

408739 次浏览

要更改数据库吗?

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

更新。

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

\dn - list of schemas

要改变模式,您可以尝试

SET search_path TO

在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

在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 |

等等……

这是旧的,但我把导出放在我的别名连接到db:

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

对于另一个schema:

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

关键词:

SET search_path TO

例子:

SET search_path TO your_schema_name;
\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'.

快速解决方案可以是:

SELECT your_db_column_name from "your_db_schema_name"."your_db_tabel_name";

如果在docker exec中使用PSQL,它是这样的:

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

如果你使用PSQL,只需输入

SET schema 'temp';

在此之后,\d显示“temp”中的所有关系

PostgreSQL 14 Debian

    postgres@ovhswift:~$ psql
psql (14.0 (Debian 14.0-1.pgdg100+1))
Type "help" for help.


postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# create schema tests;
CREATE SCHEMA
test=# \dt
Did not find any relations.
test=# create table pubtable (id integer);
CREATE TABLE
test=# create table tests.schematable (id integer);
CREATE TABLE
test=# \dt
List of relations
Schema |   Name   | Type  |  Owner
--------+----------+-------+----------
public | pubtable | table | postgres
(1 row)


test=# \dt tests.
Did not find any relation named "tests.".
test=# \dt tests
Did not find any relation named "tests".
test=# \dt 'tests.'
Did not find any relation named "tests.".
test=# \dt 'tests.*'
List of relations
Schema |    Name     | Type  |  Owner
--------+-------------+-------+----------
tests  | schematable | table | postgres
(1 row)


test=# \dt 'tests*'
Did not find any relation named "tests*".
test=# \dt 'tests.*'
List of relations
Schema |    Name     | Type  |  Owner
--------+-------------+-------+----------
tests  | schematable | table | postgres
(1 row)

对于\dv 等也是如此,以查看模式中的视图