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

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

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

postgres=# \l
                                                       List of databases
   Name    |  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/postgres
 template1 | 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.mfbz.cn/a/556740.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

笔记软件功能多样的是哪款?做笔记的软件哪个好用

在快节奏的现代生活中,笔记软件已成为我们提高工作效率、记录生活点滴的重要工具。想象一下,在繁忙的工作中,你能够快速记录下关键信息,或在灵感迸发时及时捕捉,这是多么方便高效。 一款功能多样的笔记软件&#xff0…

Syncovery for Mac:高效文件备份和同步工具

Syncovery for Mac是一款专为Mac用户设计的文件备份和同步工具,凭借其高效、安全和易用的特点,深受用户好评。 Syncovery for Mac v10.14.2激活版下载 该软件具备强大的备份功能,支持多种备份方案和数据格式,用户可以根据需求轻松…

Python教学入门:函数

在 Python 中,def 关键字用于定义函数。函数是一段可重用的代码块,用于执行特定的任务或操作。通过定义函数,可以将一段代码封装起来,使其可以在程序中被多次调用,提高代码的复用性和可维护性。 下面是 def 函数定义的…

pandas/python 一个实战小案例

上次写坦克游戏的时候,接触了一点pandas,当时只是简单了解了一下如何遍历行和列并获取值来替换图片,想更多了解pandas。正好有一些数据需要筛选,试试能不能用通过代码实现。虽然总的来说不复杂,但由于原始数据在命名、…

如何训练猫出门不害怕:耐心做好这些训练,轻松get能溜的小猫

一般我们外出见到的都是遛狗的,溜猫的相对少见,一方面是因为猫咪是喜欢安静独处的小动物,另一方面是糟乱的环境也容易引起猫咪的应激。对于是否应该“溜猫”,有两个极端的阵营。一些铲屎官认为应尊重猫的天性,胆小不爱…

如何使用AI写作扩写文章?看完这篇学会扩写

如何使用AI写作扩写文章?在数字化时代的浪潮下,人工智能(AI)已经深入渗透到我们生活的各个领域,其中,AI写作扩写技术更是以其高效、便捷的特点受到了广大用户的青睐。它不仅极大提升了写作效率,…

Leetcode算法训练日记 | day29

一、递增子序列 1.题目 Leetcode:第 491 题 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等&…

硬件?、嘉立创EDA画PCB规则设计

1、打开规则设计 设置单位为mil 点击全部 将安全距离设置为8mil,这个8mil是目前很多生产PCB的工厂可以做的,如果距离设置的更小也就是性能要求更高,相应的生产成本也高元件到元件的距离设置为20mil 2、设置导线的宽度规则,可以对v…

第G6周:CycleGAN实践

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、CycleGAN原理 (一)CycleGAN的原理结构: CycleGAN(循环生成对抗网络)是一种生成对抗网络&…

思维导图软件Xmind for Mac 中文激活版 支持M

XMind是一款非常受欢迎的思维导图软件,它应用了Eclipse RCP软件架构,注重易用性、高效性和稳定性,致力于帮助用户提高生产率。 Xmind for Mac 中文激活版下载 XMind的程序主体由一组插件构成,包括一个核心主程序插件、一组Eclipse…

文件后缀变成.halo? 如何恢复重要数据

.halo 勒索病毒是什么? .halo勒索病毒是一种恶意软件,属于勒索软件(Ransomware)的一种。这种病毒会加密用户计算机上的文件,并要求受害者支付赎金才能获取解密密钥,从而恢复被加密的文件。勒索软件通常会通…

力扣(leetcode) 42. 接雨水 (带你逐步思考)

力扣(leetcode) 42. 接雨水 (带你逐步思考) 链接:https://leetcode.cn/problems/trapping-rain-water/ 难度:hard 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多…

【方便 | 重要】#LLM入门 | Agent | langchain | RAG # 3.7_代理Agent,使用langchain自带agent完成任务

大型语言模型(LLMs)虽强大,但在逻辑推理、计算和外部信息检索方面能力有限,不如基础计算机程序。例如,LLMs处理简单计算或最新事件查询时可能不准确,因为它们仅基于预训练数据。LangChain框架通过“代理”(…

机器学习在安全领域的应用:从大数据中识别潜在安全威胁

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Ubuntu20.04 ISAAC SIM仿真下载使用流程(4.16笔记补充)

机器:华硕天选X2024 显卡:4060Ti ubuntu20.04 安装显卡驱动版本:525.85.05 参考: What Is Isaac Sim? — Omniverse IsaacSim latest documentationIsaac sim Cache 2023.2.3 did not work_isaac cache stopped-CSDN博客 Is…

LeetCode in Python 704. Binary Search (二分查找)

二分查找是一种高效的查询方法&#xff0c;时间复杂度为O(nlogn)&#xff0c;本文给出二分查找的代码实现。 示例&#xff1a; 代码&#xff1a; class Solution:def search(self, nums, target):l, r 0, len(nums) - 1while l < r:mid (l r) // 2if nums[mid] > ta…

C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

一 线性表的概念 线性结构是一种最简单且常用的数据结构。 线性结构的基本特点是节点之间满足线性关系。 本章讨论的动态数组、链表、栈、队列都属于线性结构。 他们的共同之处&#xff0c;是节点中有且只有一个开始节点和终端节点。按这种关系&#xff0c;可以把它们的所有…

MC9S12A64 程序烧写方法

前言 工作需要对MC9S12A64 单片机进行程序烧写。 资料 MC9S12A64 单片机前身属于 飞思卡尔半导体&#xff0c;后来被恩智浦收购&#xff0c;现在属于NXP&#xff1b; MC9S12A64 属于16位S12系列&#xff1b;MC9S12 又叫 HCS12。 数据手册下载连接 S12D_16位微控制器 | N…

[大模型]TransNormerLLM-7B 接入 LangChain 搭建知识库助手

TransNormerLLM-7B 接入 LangChain 搭建知识库助手 环境准备 在 autodl 平台中租赁一个 3090/4090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其…

简单实用的备忘录小工具 记事提醒备忘效果超好

在这个信息爆炸的时代&#xff0c;我们每个人都需要处理大量的信息和任务。有时候&#xff0c;繁忙的生活和工作会让我们感到压力山大。幸运的是&#xff0c;现在有很多简单实用的软件工具&#xff0c;像得力的小助手一样&#xff0c;帮助我们整理思绪&#xff0c;提高效率&…
最新文章