在 PostgreSQL 中为特定模式和表所有者创建表的过程是啥

Posted

技术标签:

【中文标题】在 PostgreSQL 中为特定模式和表所有者创建表的过程是啥【英文标题】:What is the process to create tables in PostgreSQL for a specific schema and table owner在 PostgreSQL 中为特定模式和表所有者创建表的过程是什么 【发布时间】:2021-06-20 16:58:04 【问题描述】:

我是来自 Oracle 背景的 Postgres 新手。

我正在使用 pgAdmin4,在其中创建了一个名为 my_db 的数据库以及一个名为 admin_schema 的架构。

确保在 my_db 数据库中创建的所有新表都属于模式 admin_schema 和表所有者 admin_owner 的步骤是什么?我不确定如何创建?

我基本上不希望我创建的表属于模式名 PUBLIC 和表所有者 POSTGRES。

更新

回答以下问题:

我在 Ubuntu 20.04 中使用 pgAdmin4,我假设我以用户 postgres 身份登录 我只有一台用户名为 postgres 的服务器 我目前没有名为 admin_owner 的用户或角色,不确定如何创建? 不确定如何启动 pgAdmin 以便它使用用户:admin_owner? 我基本上希望我的所有表都由数据库 my_db 中的 admin_schema 架构下的 admin_owner 拥有

【问题讨论】:

您是否以postgres 的身份登录以创建这些表? “确保”到底是什么意思?您是否只是希望这成为使用CREATE TABLE(针对哪些用户)创建的表的默认值?还是完全拒绝任意用户创建任何其他表的权限? 如果您想阻止使用 public 架构,您当然可以删除它 :-) 您是否已经使用密码创建了角色admin_owner。该角色是否允许创建模式和表? 更新了我的主要帖子,以解决您的上述问题。 【参考方案1】:

我目前没有名为 admin_owner 的用户或角色,因为不确定如何创建它

对于create 用户,以超级用户(postgres)身份登录,然后运行:

create user admin_owner with password '******';

我基本上希望我的所有表都由数据库 my_db 中的 admin_schema 架构下的 admin_owner 拥有

创建用户后,创建the schema:

create schema admin_schema 
   authorization admin_user; --<< this makes admin_user the owner of the schema. 

如果您不想为每个表引用加上架构名称的前缀,请更改管理员用户的 search path:

alter user admin_user  
   set search_path = admin_schema;

不确定如何启动 pgAdmin 以便它使用用户:admin_owner

在 pgAdmin(混淆地称为“服务器”)中创建一个新连接,指定 admin_user 作为用户名,并提供您在创建用户时指定的密码。


根据您配置 Postgres 服务器的方式,您可能需要调整 pg_hba.conf 以允许远程密码连接。

【讨论】:

【参考方案2】:

作为 Oracle 用户,您自然会对模式感到困惑。模式与用户不同。唯一的联系是模式(与所有其他数据库对象一样)具有所有者。特别是,表不能属于模式,它们可以(逻辑上)位于模式中。

要让某个表属于某个用户,请以该用户身份登录数据库并创建该表。对象属于创建它的用户。

要将表放在特定架构中,请使用架构限定表名:

CREATE TABLE admin_schema.table (...);

【讨论】:

作为替代方案,如果您在以其他所有者身份登录时创建了表,您可以更改为表的所有者:ALTER TABLE [schema_name.]table_name OWNER TO another_username;

以上是关于在 PostgreSQL 中为特定模式和表所有者创建表的过程是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 init.sql 在 Postgresql 中创建数据库、模式和表

通过只知道模式和表名来删除 postgresql 中的主键约束

在 PostgreSQL 中为临时变量分配特定的数据类型

PostgreSQL字段名和表名大小写的问题

列出 PostgreSQL 模式中的表

如何在 postgresql 中为数据库创建用户? [关闭]