【赵渝强老师】PostgreSQL的数据库

PostgreSQL的逻辑存储结构主要是指数据库中的各种数据库对象,包括:数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid(object identifiers),它是一个无符号的四字节整数,相关对象的oid都存放在相关的系统目录表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。下图展示了PostgreSQL数据库的逻辑存储结构。

下面重点介绍一下PostgreSQL中的数据库。

视频讲解如下
【赵渝强老师】Postgresql的数据库

在PostgreSQL中,一个数据库是数据库对象的集合。通常每个数据库对象属于并且只属于一个数据库。更准确地说,一个数据库是一个模式的集合,而模式包含表、函数等等各种数据库对象。因此数据库的完整层次应该包含如下组成部分:数据库服务器、数据库、模式、表或者某些其他对象类型,如存储过程、存储函数等等。当连接到数据库服务器时,客户端必须在它的连接请求中指定它要连接的数据库名,通过数据库实例来操作数据库中的对象。用户可能是在同一个数据库里,但可能在不同的模式中。

执行下面的语句可以查看当前PostgreSQL数据库集群中已有的数据库信息。

sql 复制代码
postgres=# \l
           List of databases
   Name    |  Owner   | Encoding |......
-----------+----------+----------+-------
 postgres  | postgres | UTF8     |......
 template0 | postgres | UTF8     |......
 template1 | postgres | UTF8     |......
 
(3 rows)

下面详细解释一下每个数据库的作用。

  • postgres数据库由initdb命令在初始化数据存储区域时创建的。该数据库也是客户端默认连接的数据库。
  • template0是标准系统数据库,该数据库中只包含PostgreSQL版本预定义的标准对象。在数据库集群被初始化之后,不应该对template0做任何修改。在创建数据库时通过指示使用template0取代template1进行拷贝,可以创建一个"纯净的"用户数据库。
  • template1是第二标准系统数据库。当在PostgreSQL中创建一个新数据库时,实际上就是克隆了template1。这就意味着对template1所做的任何修改都会体现在所有后续创建的用户数据库中。因此应避免在template1中创建对象,除非想把这些对象传播到每一个新创建的数据库中。

查询现有数据库集合信息也可以通过查询系统表pg_database得到。

sql 复制代码
postgres=# select datname from pg_database;

# 输出的信息如下:
  datname  
-----------
 postgres
 template1
 template0
 
(3 rows)
相关推荐
天天向上杰1 小时前
简识Redis 持久化相关的 “Everysec“ 策略
数据库·redis·缓存
Leaf吧1 小时前
springboot 配置多数据源以及动态切换数据源
java·数据库·spring boot·后端
狮歌~资深攻城狮2 小时前
TiDB出现后,大数据技术的未来方向
数据库·数据仓库·分布式·数据分析·tidb
狮歌~资深攻城狮2 小时前
TiDB 和信创:如何推动国产化数据库的发展?
数据库·数据仓库·分布式·数据分析·tidb
清风-云烟2 小时前
使用redis-cli命令实现redis crud操作
java·linux·数据库·redis·spring·缓存·1024程序员节
雾里看山3 小时前
【MySQL】数据库基础知识
数据库·笔记·mysql·oracle
高铭杰3 小时前
Postgresql源码(141)JIT系列分析汇总
postgresql·jit·llvm
vd_vd4 小时前
Redis内存面试与分析
数据库·redis·面试
码农研究僧4 小时前
Oracle SQL: TRANSLATE 和 REGEXP_LIKE 的知识点详细分析
数据库·sql·oracle·translate·regexp_like
Denodo4 小时前
10倍数据交付提升 | 通过逻辑数据仓库和数据编织高效管理和利用大数据
大数据·数据库·数据仓库·人工智能·数据挖掘·数据分析·数据编织