(六)PostgreSQL的组织结构(2)-默认数据库

server/2024/12/23 3:15:47/

PostgreSQL的组织结构(2)-默认数据库

安装完postgresql后,我们发现它自带了3个数据库。postgres、template0、template1

postgres=# \lList of databasesName    |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges   
-----------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------postgres  | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | template0 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +|          |          |                 |             |             |            |           | postgres=CTc/postgrestemplate1 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +|          |          |                 |             |             |            |           | postgres=CTc/postgres
(3 rows)

postgres

在 PostgreSQL 中,postgres 库是默认创建的数据库,它通常用作新用户的初始数据库以及进行各种操作和管理任务的地方。

作用和用途

  1. 默认连接数据库:当用户第一次连接到 PostgreSQL 实例时,如果没有指定特定的数据库,通常会连接到 postgres 数据库。这使得新用户在开始创建自己的数据库之前有一个默认的操作环境。

  2. 管理和维护任务:数据库管理员(DBA)通常使用 postgres 数据库执行一些管理任务,如查询系统目录、管理用户(角色)和权限,以及执行数据库级别的维护操作等。

  3. 模板数据库:尽管 postgres 数据库本身不是模板数据库(PostgreSQL 使用名为 template1 的数据库作为新数据库的默认模板),但在实践中,很多数据库管理员会使用 postgres 库来创建或测试数据库对象和策略,然后在新的用户数据库中实施这些对象和策略。

  4. 系统级别的查询和操作postgres 数据库也经常被用来执行系统级别的查询,比如查询 pg_cataloginformation_schema 这样的系统目录来获取数据库实例的全局信息。

注意事项

  • 虽然 postgres 数据库通常用于上述目的,但强烈建议开发者或测试者创建并使用自己的数据库环境,以避免在 postgres 数据库中意外更改数据或配置,这些更改可能会影响到其他数据库或整个 PostgreSQL 实例的运行。

  • 对于生产环境,将具体的业务数据和应用存储在单独创建的数据库中,而不是默认的 postgres 数据库中,是一种最佳实践。这样做有助于保持环境的清洁、安全,以及更好地管理和维护数据。

简而言之,postgres 数据库作为 PostgreSQL 提供的默认数据库,主要用作初始连接点以及执行系统级别的管理和查询任务。但对于任何具体的业务应用或数据存储,建议创建专用的数据库。

template0template1

在 PostgreSQL 中,template0 是一个特殊的系统数据库模板,它的存在具有重要意义。PostgreSQL 允许通过现有数据库来创建新数据库,而 template0template1 是创建新数据库时可供选择的模板数据库。然而,template0template1 在用途和功能上有一些关键的区别。

template0 的主要用途

  1. 恢复默认设置template0 提供了一个干净的状态,反映了 PostgreSQL 安装时数据库的初始状态。如果 template1 被不小心修改了,template0 可用于创建一个全新的、未修改的数据库。

  2. 创建新数据库时指定编码:当需要以与 template1 不同的编码创建数据库时,template0 是理想的选择。使用 template0,用户可以创建具有不同编码或 LC_COLLATE(排序规则)设置的数据库。

理解 template0template1

template1

  • 默认模板template1 是 PostgreSQL 中创建新数据库时的默认模板。除非在创建数据库时明确指定了其他模板(包括 template0),否则新创建的数据库会复制 template1 的内容。
  • 用户自定义template1 可以被修改。这意味着,你可以向 template1 中添加公共数据或者设置数据库级别的配置,这样所有基于 template1 创建的新数据库都会继承这些数据和设置。这对于需要在多个数据库中重复使用相同设置或数据的场景很有用。
  • 恢复默认模板的后备选项:由于 template1 可能被修改,所以存在它可能无法用作创建新数据库的默认模板的风险。这就是 template0 存在的意义之一。

template0

  • 干净的初始状态template0 提供了一个干净的、未经修改的数据库模板,反映了 PostgreSQL 安装时的初始状态。它保证了即使 template1 被修改,你仍然可以创建一个干净、原始状态的数据库。
  • 字符集和校对规则的变更template0 允许创建与默认设置(template1可能已经修改)不同的字符集或校对规则的数据库。这在需要支持多语言或特定字符集/校对规则的新数据库时非常有用。
  • 不可修改:为了保持其作为干净模板的角色,template0 是只读的,不允许对其进行更改。这确保了无论系统如何变化,template0 都能提供一个一致的、未经修改的状态,用于创建新的数据库。

使用 template0 创建数据库

CREATE DATABASE newdb WITH TEMPLATE template0 ENCODING 'UTF8';

这个例子显示了如何使用 template0 创建一个新的 UTF-8 编码的数据库。使用 template0 是一个保险的选择,特别是当 template1 因为某些原因(例如,包含了特定于应用的设置或对象)而不适用时。

注意事项

  • template0template1 都不应该用于普通业务数据的存储。它们是系统级别的数据库,主要用于作为创建新数据库的模板。
  • 默认情况下,template0 是不允许连接的,这是为了防止意外修改其中的内容。
--尝试连接template0库,会报错。说明了默认禁止这种操作。
template1=# \c template0
2024-04-10 20:24:13.817 PDT [47814] FATAL:  database "template0" is not currently accepting connections
connection to server on socket "/tmp/.s.PGSQL.5777" failed: FATAL:  database "template0" is not currently accepting connections
Previous connection kept--尝试连接template1,可以正常登录。 
template1=# \c template1
You are now connected to database "template1" as user "postgres".
template1=# 

template0 提供了一种创建具有特定设置(如编码和排序规则)新数据库的方法,同时也作为一个后备选项,保证在 template1 被修改的情况下还能创建新的数据库。

谨记:心存敬畏,行有所止。


http://www.ppmy.cn/server/1485.html

相关文章

计算机网络——40各个层次的安全性

各个层次的安全性 安全电子邮件 Alice需要发送机密的报文m给Bob Alice 产生随机的对称秘钥, K s K_s Ks​使用 K s K_s Ks​对报文进行加密(为了效率)对 K s K_s Ks​使用Bob的公钥进行加密发送 K s ( m ) K_s(m) Ks​(m)和 K B ( K S ) K…

达梦数据库一体机树立金融解决方案标杆

达梦数据库一体机自问世以来,获得众多行业用户的高度关注,并率先在金融行业吹响冲锋号角,实现多个重大项目的落地应用。近日,珠海华润银行股份有限公司基于达梦数据库一体机 I 系列的《数据库一体机银行多业务系统集中部署解决方案…

如何查看docker配置的镜像仓库

在Docker中,想要查看配置的镜像仓库(注册表)地址,可以通过查询Docker守护进程的配置来实现。在Linux系统中,Docker守护进程的配置文件通常位于 /etc/docker/daemon.json。该文件中可能会包含registry-mirrors配置项&am…

代理模式:控制对象访问的智能方式

在面向对象的软件开发中,代理模式是一种结构型设计模式,它为其他对象提供一个代理或占位符以控制对这个对象的访问。代理模式在实现权限控制、延迟初始化和远程对象访问等方面非常有用。本文将详细介绍代理模式的定义、实现、应用场景以及优缺点&#xf…

java的深入探究JVM之类加载与双亲委派机制

前言 前面学习了虚拟机的内存结构、对象的分配和创建,但对象所对应的类是怎么加载到虚拟机中来的呢?加载过程中需要做些什么?什么是双亲委派机制以及为什么要打破双亲委派机制? 类的生命周期 类的生命周期包含了如上的7个阶段&a…

安全开发之碰撞检测与伤害计算逻辑

一、什么是碰撞检测逻辑? 用通俗移动的话来说,碰撞检测就是一门检测两部分运动轨迹是否碰到一起的逻辑,在游戏中一般至少包含2方面的碰撞检测逻辑:一、核心玩法的碰撞检测逻辑;二、运动碰撞检测逻辑。 关于核心玩法的…

R语言影像批量镶嵌与裁剪——mosaic

你有中国不同省份的影像,想要拼接镶嵌成完整的中国影像 镶嵌一 library("raster") library("sp") library("rgdal") library("rgeos") library("…

Module外贸主题开心版下载-v5.7.0版本WordPress企业模板

主题下载地址:Module外贸主题开心版下载-v5.7.0版本 Module主题介绍:采用全新模块化开发,首页模块可视化拖拽自由组合,可自定义搭建出不同行业适用的企业网站。同时主题全面支持WPML多语言切换,可轻松搭建外贸网站。W…