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

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.mzph.cn/bicheng/386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4399下架了的flash游戏 网盘自提取

下载好游戏后,需要使用flash进行打开,直接拖动游戏文件到flash文件,即可用flash快捷打开。 flash下载 百度网盘链接:https://pan.baidu.com/s/1KUz4ymg0SS7wFGH54hdE3A?pwdnisj 提取码:nisj 一、幻想纹章 不太行了…

elasticsearch 关于向量化检索

1、elasticsearch使用的是8.5.0 索引和mapping构建: PUT image-index {"mappings": {"properties": {"mydatavector": {"type": "dense_vector","dims": 3,"index": true,"similarit…

什么是死锁?死锁产生的条件是什么?

死锁 死锁是指两个或两个以上的进程(或线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进…

【学习】linux实用命令

LINUX命令 普通用户查询系统信息 命令 : [wlm]$ cat /ect/os-release NAME "Kylin" VERSION ""功能: 这个输出会告诉你正在使用的操作系统的名称(NAME)、版本(VERSION 或 VERSION_ID&#xf…

基于sfunction builder的c-sfunction编写——自定义函数编写

目录 前言 1、sfunction builder自定义函数编写方法一 2、sfunction builder自定义函数编写方法二 3.总结

Node.JS后端开发笔记整理(简洁版)

前端 1. 开发环境和技术栈 开发工具:Visual Studio CodeNode.js版本:18.19.0(建议保持在18)包管理器:npm前端框架:Vue3.4脚本语言:TypeScript构建工具:Vite后端框架:Ex…

ubuntu设置扩充swap交换空间

Swap是指Linux系统中的交换分区,类似于Windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存来使用,从而解决内存不足的问题。交换分区,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行! …

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…

异步FIFO约束set_max_delay

1.最大延迟set_max_delay set_max_delay [-datapath_only] -from [ node_list] -to [node_list] delay_value 在Set Max Delay约束中使用-datapath_only选项时,它指示综合工具在优化设计时仅考虑数据通路的延迟,而不考虑控制逻辑的延迟。 关于最大最小…

大话数据结构学习笔记-线性表(二)-顺序存储结构

顺序存储定义 线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表的数据元素。一般就是用一维数组来实现。 顺序存储结构定义 描述顺序存储结构的线性表需要以下三个属性 1)存储空间的起始位置:数组data。它的存储位置就是存储空间的存储位置 2…

L1正则化的数学公式

L1正则化是机器学习和统计学中常用的正则化技术,用于控制模型的复杂度并防止过拟合。它们的数学表达如下: L1正则化(也称为Lasso正则化):在损失函数中添加模型参数的绝对值之和作为正则化项。其数学公式如下所示&…

利用地图资源工具让Sentinel-2自动生成NDVI\EVI

新版地图资源工具已经能自动计算EVI了,也就是现在工具可以自动计算NDVI、EVI及做哨兵L1C数据的自动预处理!只要勾选如下选项后数据下载的同时会自动生成NDVI、EVI! 归一化差异植被指数 (NDVI) 由于植被在近红外波段处有较强的反射&#…

Training - PyTorch Lightning 的 Horovod 策略实践 (all_gather)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137686312 在 PyTorch Lightning 中使用 Horovod 策略,可以在多个 GPU 上并行训练模型。Horovod 是分布式训练框架&#xff…

Oladance、南卡、漫步者开放式耳机好不好用?3大当红明星产品测评PK

​在音频市场中,开放式耳机以其创新设计和卓越听感赢得了一定的关注。然而,也存在一些产品质量和音质不尽人意,甚至可能影响用户听力安全。作为一名专业的音频设备评测师,我建议用户在选择开放式耳机时,应优先选择那些…

《R语言与农业数据统计分析及建模》学习——控制流

1、控制流的概念和作用 控制流是指根据循环或条件来控制程序的执行顺序和逻辑。 2、循环语句 循环语句允许程序重复执行特定的代码块,知道满足特定条件。 在R语言中,常见的循环语句有for、while和repeat。 # for循环用于在已知次数的情况下重复执行代码…

磁盘的管理

会在linux中使用硬盘 分区 格式化(重新安装文件系统) 挂载 硬盘的分类 1.机械硬盘 2.固态硬盘 硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的 数据 (扇区越多容量越大) 存放数据的…

2024.4.13 Python 爬虫复习day01

目录 day01_HTTP协议HTML页面web服务器 各类名词解释 URL统一资源定位符 HTTP协议 HTML页面 知识点: 第一个页面 标题标签和图片标签 注册页面 登录页面 WEB服务器 安装fastapi和uvicorn 原始命令方式 镜像源命令方式 工具方式 快速搭建web服务器 知识点: 示例…

openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置

文章目录 openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置266.1 查看当前数据盘的文件系统类型266.2 对于需要修改的磁盘,备份所需的数据至其他磁盘或其他服务器266.3 格式化磁盘为xfs文件系统266.4 执行**步骤一** openGauss学习笔记-…

你见过哪些目瞪口呆的 Java 代码技巧?

自从毕业后,今年已经是我工作的第 8 个年头了,我甚至都快忘记了到底是那年毕业的。从出来本人一直在做 Java 相关的工作,现在终于有时间坐下来,写一篇关于 Java 写法的一篇文章,来探讨一下如果你真的是一个 Java 程序员…

[Leetcode]用队列实现栈

1.用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回…