如何将表添加到 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 中具有特定模式的 Linq 和实体迁移