[转帖]PostgreSQL中的schema和user
https://www.cnblogs.com/abclife/p/13905336.html
postgresql中,用户创建的所有对象都被创建在指定的schema(或namespace)中。其他用户可能拥有、也可能不拥有访问这些对象的权限,甚至都不可以在对应的schema中创建对象。

从上面的表可以看出,用户(或角色)是全局对象,不是定义在数据库中,而是定义在实例的级别。schema是用户在指定的数据库中创建的,其中包含数据库对象。
可能有人对下面的操作感到困惑:
|
1
2
3
4
5
6
7
|
$ psqlpsql (11.9)Type "help" for help.postgres=# create table t1(a int);CREATE TABLEpostgres=# |
在这个创建表的语句中,并没有指定schema。那这些表会在哪里呢?
每个postgresql数据库默认都有一个public schema,如果没有为对象显式地指定schema,新创建的对象就是放在public schema中。有几种方式可以查看给定的表是属于哪个schema,但是最常用的主要有两种:1.查看系统目录视图;2.使用psql短命令
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
postgres=# select schemaname from pg_tables where tablename ='t1'; schemaname------------ public(1 rows)postgres=# \d t1 Table "public.t1" Column | Type | Collation | Nullable | Default--------+---------+-----------+----------+--------- a | integer | | |postgres=# |
在postgresql中,public schema是一个特殊的schema,你要么移除该schema,要么收回在public schema上授予给public的权限。
当你删除了public schema后尝试创建一个表,会发生什么呢?
|
1
2
3
4
5
6
7
8
|
postgres=# drop schema public cascade;NOTICE: drop cascades to table t1DROP SCHEMApostgres=# create table t1 ( a int );ERROR: no schema has been selected to create inLINE 1: create table t1 ( a int ); ^postgres=# |
我们现在没有schema了:
|
1
2
3
4
5
|
postgres=# \dnList of schemas Name | Owner------+-------(0 rows) |
postgresql不知道去哪里创建表。这里也可以看出,在postgresql中schema和user是不同的了。我们是以postgres用户登录,但是没有schema可以创建对象。
现在,我们来创建一个schema:
|
1
2
3
4
5
6
7
|
postgres=# create schema my_schema;CREATE SCHEMApostgres=# create table t1(a int);ERROR: no schema has been selected to create inLINE 1: create table t1(a int); ^postgres=# |
仍然不可以创建表。这里可能会问:为什么有public schema就可以呢?在上面的演示中我们并没有指定public schema呀!这里就需要提到参数search_path了:
|
1
2
3
4
5
6
7
|
postgres=# show search_path; search_path ----------------- "$user", public(1 row)postgres=# |
缺省情况下,search_path包含当前用户名和public。所以会创建失败。
有两种方式来解决:
|
1
2
3
4
5
6
7
|
postgres=# create table my_schema.t1 ( a int );CREATE TABLEpostgres=# \d my_schema.t1 Table "my_schema.t1" Column | Type | Collation | Nullable | Default--------+---------+-----------+----------+--------- a | integer | | | |
或者调整search_path的值:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
postgres = # set search_path = 'my_schema',"$user",public;SETpostgres = # show search_path ;search_path----------------------------my_schema, "$user", public(1 row)postgres = # create table t2 ( a int );CREATE TABLEpostgres = # \d t2 Table "my_schema.t2" Column | Type | Collation | Nullable | Default--------+---------+-----------+----------+--------- a | integer | | |postgres = # |
[转帖]PostgreSQL中的schema和user的更多相关文章
- PostgreSQL 中定义自己需要的数据类型
PostgreSQL解决某系数据库中的tinyint数据类型问题,创建自己需要的数据类型如下: CREATE DOMAIN tinyint AS smallint CONSTRAINT tinyint ...
- 在PostgreSQL中使用oracle_fdw访问Oracle
本文讲述如何在PostgreSQL中使用oracle_fdw访问Oracle上的数据. 1. 安装oracle_fdw 可以参照:oracle_fdw in github 编译安装oracle_fdw ...
- PostgreSQL学习----模式schema
PostgreSQL学习---模式schema 小序 接触PostgreSQL也有好长时间了,知识不总结梳理,似乎总不是自己的,继续努力吧少年!以此记录我的软件工艺之路! 模式(Schema) 一个 ...
- PostgreSQL中定时job执行(pgAgent)
PostgreSQL中定时job执行 业务分析 近期项目需要定期清理数据库中的多余数据,即每月1号删除指定表中一年以上的数据. 初步分析这种定时job可以使用一下两种技术实现: Linux的cront ...
- [转帖]PostgreSQL的用户、角色和权限管理
PostgreSQL的用户.角色和权限管理 2018年05月18日 14:02:29 jerry-89 阅读数 6143 https://blog.csdn.net/eagle89/article/d ...
- [转帖]PostgreSQL与MySQL比较 From 2010年
PostgreSQL与MySQL比较 [复制链接] http://bbs.chinaunix.net/thread-1688208-1-1.html osdba 稍有积蓄 好友 博客 消息 论坛徽章 ...
- 在PostgreSQL中 pg_start_backup 做了什么?
# 在PostgreSQL中 pg_start_backup 做了什么?HM 2019-07-30 ## pg_start_backup 做一个备份开始标记,还做了一些其他的操作,下面进行探寻. * ...
- PostgreSQL 模式(SCHEMA)
PostgreSQL 模式(SCHEMA)可以看着是一个表的集合. 一个模式可以包含视图.索引.据类型.函数和操作符等. 相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 ...
- 通过arcgis在PostgreSQL中创建企业级地理数据库
部署环境: Win7 64位旗舰版 软件版本: PostgreSQL-9.1.3-2-windows-x64 Postgis-pg91x64-setup-2.0.6-1 Arcgis 10.1 SP1 ...
- PostgreSQL 中日期类型转换与变量使用及相关问题
PostgreSQL中日期类型与字符串类型的转换方法 示例如下: postgres=# select current_date; date ------------ 2015-08-31 (1 row ...
随机推荐
- 开发篇1:使用原生api和Langchain调用大模型
对大模型的调用通常有以下几种方式:方式一.大模型厂商都会定义http风格的请求接口,在代码中可以直接发起http请求调用:方式二.在开发环境中使用大模型厂商提供的api:方式三.使用开发框架Langc ...
- Ynoi
P4688 [Ynoi2016] 掉进兔子洞 序列,静态,求三个区间的可重集的交的大小,离线,\(n,Q\le 10^5\),3s,500MB 缺乏性质 \(\rightarrow\) bitset ...
- 论文解读:ACL2021 NER | 基于模板的BART命名实体识别
摘要:本文是对ACL2021 NER 基于模板的BART命名实体识别这一论文工作进行初步解读. 本文分享自华为云社区<ACL2021 NER | 基于模板的BART命名实体识别>,作者: ...
- 顶级加密混淆混淆工具测评:ipagurd
顶级加密混淆混淆工具测评:ipagurd 摘要 JavaScript代码安全需求日益增长,因此JavaScript混淆工具的使用变得广泛.本文将对专业.商业JavaScript混淆工具ipagur ...
- 利用 Solon-web 框架写一个 Hello World
Solon 项目的开源地址: https://gitee.com/noear/solon 最近看了不少别人写的各种框架的 Hello world 示例,有些看起来,真的很复杂. 今天,我们用号称简单到 ...
- PPT 版面的规则和精髓
排版四原则 对齐 对比 亲密 重复 背景图 案例
- PPT 表格设计
顶级商业图表在哪找 https://www.mckinsey.com.cn/ 麦肯锡 图表 https://www.cbnweek.com 第一财经 https://data.163.com/ DAT ...
- 使用nginx代理emqx的TCP、WS、WSS连接请求
项目代理关系: 注:主机上已存在名为:nginx-proxy 的一级 nginx 的代理,将监听了主机的 80.443端口 docker-compose.yml version: "3.7& ...
- 为什么 Go 和 Rust 语言都舍弃了继承?
为什么go和rust语言都舍弃了继承? 舍弃了 Class 舍弃或弱化子类型 类的继承是一段儿弯路 OO 发明了继承,然后发现真正有意义的是 interface 的组合(更准确的说,是 Product ...
- Codeforce :466C. Number of Ways (数学)
https://codeforces.com/problemset/problem/466/C 解题说明:此题是一道数学题,若平分分成若干种情况,应当整体(sum)考虑,对sum/3进行分析.它是区分 ...