如何将表添加到 PostgreSQL 的特定架构中?

22

我有这个:

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+仍然显示“persons”在public中。
那么,如何将这个表放到我想要的模式中呢?谢谢。

3
你在psql中运行过\d+ "Lab1".PERSONS还是\d+ Lab1.PERSONS?请注意,我已经尽力使翻译更加通俗易懂,但没有改变原意。 - Vao Tsun
3个回答

30

尝试运行:

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模式下,请修改您的语句:

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+来获取public模式。谢谢。 - Luke
1
select * from pg_tables 就可以了。如果在 psql 中有元命令?..不太确定。你可以用 \dn 列出模式,然后再列出表。 - Vao Tsun
我认为psql用户可以使用search_path列出模式列表。 - Vao Tsun
最帮助我的是将模式名称用双引号括起来的提示,例如"Lab1"。我甚至尝试使用包含点的模式,例如"v0.1",这也能正常工作,并且我可以直接在查询工具窗口中使用它。 - Abdul Rahman Kayali

0
在创建表之前,您可以运行此命令。这样就不需要添加模式前缀。
SET search_path TO myschema;

解决方案


-3

Choose the database and right click then choose the option "Query tool" and in which you want to create a table in particular a particular schema

选择数据库,右键单击,然后选择“查询工具”选项,在其中您想要创建特定模式下的表。

3
不确定是否回答了问题,请说明您正在使用的工具。 - Daniel Chepenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接