如何将表添加到 postgreSQL 中的特定模式?

Posted

技术标签:

【中文标题】如何将表添加到 postgreSQL 中的特定模式?【英文标题】:How do I add tables to a specific schema in postgreSQL? 【发布时间】:2017-06-03 21:53:00 【问题描述】:

我有这个:

DROP SCHEMA Lab1 CASCADE;
CREATE SCHEMA Lab1;
CREATE TABLE Lab1.PERSONS(
SSN   INT primary key,
Name CHARACTER (30),
HouseId  INT,
ApartmentNumber  INT ,
Salary   DECIMAL (5, 2)  
);

但这不起作用,它可以很好地创建架构,然后在无法查看的奇怪位置创建表(例如\d+),事实上,我知道它存在的唯一方法是如果您尝试删除“lab1”架构,它会抛出一个错误,说明 lab1 正在使用架构。

我尝试将默认路径设置为 lab1 架构:ALTER ROLE -myusername- SET SEARCH_PATH to Lab1;

但这也不起作用,\d+ 仍然有公开的“人”。

那么,如何将这个表放入我想要的架构中?谢谢。

【问题讨论】:

你是在 psql 中运行 \d+ "Lab1".PERSONS 还是 \d+ Lab1.PERSONS?.. 【参考方案1】:

选择数据库并右键单击,然后选择“查询工具”选项,并在其中创建一个表,特别是特定模式

【讨论】:

不确定这是否能回答问题。请指定您正在使用的工具。【参考方案2】:

试运行:

DROP SCHEMA Lab1 CASCADE;
CREATE SCHEMA Lab1;
CREATE TABLE Lab1.PERSONS(
SSN   INT primary key,
Name CHARACTER (30),
HouseId  INT,
ApartmentNumber  INT ,
Salary   DECIMAL (5, 2)  
);
t=# \dt+ lab1.persons
 lab1   | persons | table | postgres | 0 bytes |

如您所见,该表是在 lab1 模式中创建的。如果你想在Lab1 模式中使用它,你应该修改你的statemet:

t=#     DROP SCHEMA "Lab1" CASCADE;
ERROR:  schema "Lab1" does not exist
t=#     CREATE SCHEMA "Lab1";
CREATE SCHEMA
t=#     CREATE TABLE "Lab1".PERSONS(
t(#     SSN   INT primary key,
t(#     Name CHARACTER (30),
t(#     HouseId  INT,
t(#     ApartmentNumber  INT ,
t(#     Salary   DECIMAL (5, 2)
t(#     );
CREATE TABLE
t=#     \dt+ "Lab1".persons
 Lab1   | persons | table | postgres | 0 bytes |

【讨论】:

抱歉,回复延迟了很长时间,我得到了和你一样的东西。是否有任何命令可以查看所有模式中的所有关系?因为它似乎做 \dt+ 只是得到公共模式。谢谢。 select * from pg_tables 可以。如果 psql 中有元命令?..不确定。您可以使用\dn 列出架构,然后使用表格 我怀疑是否存在 - 我想 psql 用户 search_path 获取模式列表

以上是关于如何将表添加到 postgreSQL 中的特定模式?的主要内容,如果未能解决你的问题,请参考以下文章

列出 PostgreSQL 模式中的表

PostgreSQL 中具有特定模式的 Linq 和实体迁移

PostgreSQL 将表列结果保存到变量中

在 postgresql 中将模式添加到路径

使用kafka将表从Oracle复制到Postgresql不起作用

FULL OUTER JOIN 将表与 PostgreSQL 合并