当前位置: 首页 > news >正文

【postgresql基础入门】 新建数据库服务集群目录,定制属于自己的独享数据区

初始化集群

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

系列文章

  • 初始化集群
  • 数据库服务管理

一、前言

postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。

因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;

如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。

本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。

二、概述

本文主要介绍postgresql 的数据库集群,它的初始化,配置,以及它的物理结构。

在源码编译安装后,第一步就是初始化集群, 而通过安装包安装后,已经初始化了一个默认的数据库集群,启动服务后就可以直接进行SQL命令操作。

而在我们应用部署时,不同的应用往往使用不同的数据库集群目录,在物理上进行隔离,那么我们就需要对不同应用分别初始化各自的数据库集群。

三、原理

我们知道数据库主要是帮助存储和管理数据,方便我们检索,那么数据库存储数据的目录,这在postgresql中叫做集群目录,有些翻译的叫集簇目录。

集群目录下面,存放用户的数据,如创建的表,用户,索引等数据外,还有数据库组织数据,如数据库与表的映射关系,数据库的数量,表的结构定义等,我们称之为数据字典;
另外,还有一类数据是为了数据库服务运行稳定,高性能的辅助数据,如系统字典的缓存数据,空闲空间的管理数据等等。

数据库服务运行时,就会从这个目录下进行加载,所以这个目录非常重要,在实际项目中,都会有专门的系统用户才可以操作,同时还要对它进行冷备,还要进行各种策略的热备。

呃,泄漏了删库跑路原来这样子的,什么都没说。。。

三、命令介绍

在安装目录下的bin目录中,有初始化数据库集群的命令 initdb,我们一起来看下它的介绍。

# 安装后的目录大概有以下四个子目录, 
# bin 命令目录 include 是开发所需的头文件,
# lib是开发所需的库,share中包括模版配置文件,插件等 
[senllang@hatch postgres]$ ll
total 16
drwxr-xr-x. 2 senllang develops 4096 Aug  2 09:26 bin
drwxr-xr-x. 6 senllang develops 4096 Aug  2 09:24 include
drwxr-xr-x. 4 senllang develops 4096 Aug  2 09:26 lib
drwxr-xr-x. 7 senllang develops 4096 Aug  2 09:26 share
[senllang@hatch postgres]$ cd bin/

查看帮助

[senllang@hatch bin]$ ./initdb --help
initdb initializes a PostgreSQL database cluster.Usage:initdb [OPTION]... [DATADIR]Options:-A, --auth=METHOD         default authentication method for local connections--auth-host=METHOD    default authentication method for local TCP/IP connections--auth-local=METHOD   default authentication method for local-socket connections[-D, --pgdata=]DATADIR     location for this database cluster-E, --encoding=ENCODING   set default encoding for new databases-g, --allow-group-access  allow group read/execute on data directory--icu-locale=LOCALE   set ICU locale ID for new databases--icu-rules=RULES     set additional ICU collation rules for new databases-k, --data-checksums      use data page checksums--locale=LOCALE       set default locale for new databases--lc-collate=, --lc-ctype=, --lc-messages=LOCALE--lc-monetary=, --lc-numeric=, --lc-time=LOCALEset default locale in the respective category fornew databases (default taken from environment)--no-locale           equivalent to --locale=C--locale-provider={libc|icu}set default locale provider for new databases--pwfile=FILE         read password for the new superuser from file-T, --text-search-config=CFGdefault text search configuration-U, --username=NAME       database superuser name-W, --pwprompt            prompt for a password for the new superuser-X, --waldir=WALDIR       location for the write-ahead log directory--wal-segsize=SIZE    size of WAL segments, in megabytesLess commonly used options:-c, --set NAME=VALUE      override default setting for server parameter-d, --debug               generate lots of debugging output--discard-caches      set debug_discard_caches=1-L DIRECTORY              where to find the input files-n, --no-clean            do not clean up after errors-N, --no-sync             do not wait for changes to be written safely to disk--no-instructions     do not print instructions for next steps-s, --show                show internal settings-S, --sync-only           only sync database files to disk, then exitOther options:-V, --version             output version information, then exit-?, --help                show this help, then exitIf the data directory is not specified, the environment variable PGDATA
is used.Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>

参数说明

常用的参数,主要有

  • -D 指定集群目录所在的路径,这是必选的参数;比如~/testdemo,那么testdemo就是集群目录, 当然也可以设置环境变量 PGDATA 来代替-D
  • -U 指定数据库的超级管理员用户名,它具有所有权限,这是可选参数;如果不指定,默认数据库超级管理员与当前的系统用户名 同名;
  • -W 提示输入密码,这个密码是超级管理员用户的登陆密码;这也是可选参数,默认为空;

其它参数,可以在后继学习中再了解。

四、初始化集群

了解了初始化集群命令后,现在让我们初始化一个属于我们自己的数据库集群。

在当前目录下,创建testdemo的数据库集群目录,同时将数据库超级用户命名为postgres

[senllang@hatch bin]$ ./initdb -D testdemo -W -U postgres
The files belonging to this database system will be owned by user "senllang".
This user must also own the server process.Using default ICU locale "en_US".
Using language tag "en-US" for ICU locale "en_US".
The database cluster will be initialized with this locale configuration:provider:    icuICU locale:  en-USLC_COLLATE:  en_US.UTF-8LC_CTYPE:    en_US.UTF-8LC_MESSAGES: en_US.UTF-8LC_MONETARY: en_US.UTF-8LC_NUMERIC:  en_US.UTF-8LC_TIME:     en_US.UTF-8
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".Data page checksums are disabled.Enter new superuser password:
Enter it again:creating directory testdemo ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... okinitdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.Success. You can now start the database server using:pg_ctl -D testdemo -l logfile start

这样在当前目录下,就生成了一个testdemo的目录,里面有好多子目录和文件,下面我们来认识一下。

五、集群目录

[senllang@hatch bin]$ cd testdemo/
[senllang@hatch testdemo]$ ll
total 56
drwx------. 5 senllang develops    33 Sep  2 14:42 base
drwx------. 2 senllang develops  4096 Sep  2 14:42 global
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_commit_ts
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_dynshmem
-rw-------. 1 senllang develops  5711 Sep  2 14:42 pg_hba.conf
-rw-------. 1 senllang develops  2640 Sep  2 14:42 pg_ident.conf
drwx------. 4 senllang develops    68 Sep  2 14:42 pg_logical
drwx------. 4 senllang develops    36 Sep  2 14:42 pg_multixact
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_notify
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_replslot
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_serial
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_snapshots
drwx------. 2 senllang develops    25 Sep  2 14:42 pg_stat
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_stat_tmp
drwx------. 2 senllang develops    18 Sep  2 14:42 pg_subtrans
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_tblspc
drwx------. 2 senllang develops     6 Sep  2 14:42 pg_twophase
-rw-------. 1 senllang develops     3 Sep  2 14:42 PG_VERSION
drwx------. 3 senllang develops    60 Sep  2 14:42 pg_wal
drwx------. 2 senllang develops    18 Sep  2 14:42 pg_xact
-rw-------. 1 senllang develops    88 Sep  2 14:42 postgresql.auto.conf
-rw-------. 1 senllang develops 29708 Sep  2 14:42 postgresql.conf

先来看几个重要的目录和文件

  • base 目录 它里面存储各个database中的数据,包括table,index, sequence, view等等;
  • pg_wal 目录 存放我们常说的redo日志
  • log 目录 数据库服务运行的日志,上图中没有,默认没有打开日志输出到文件的开关
  • postgresql.conf 数据库服务的配置文件,比如数据库服务的监听IP,端口等大量配置
  • pg_hba.conf 主机访问控制的配置文件,默认只能本机登陆,如果需要远程访问,就需要配置许可;

其它文件我们后面慢慢了解;

六、配置文件

我们重点介绍 数据库配置文件和主机访问控制配置,先来介绍几个入门级参数,这样就可以解决刚开始使用的问题,其它参数会随着其它功能介绍一起了解。

数据库配置

默认参数的前面都会加 # ,如果需要修改的话,需要去掉前面的#,修改才能生效。

监听配置

默认localhost 和 5432,如果要远程客户端访问,可以修改为具体IP或*

listen_addresses = '*'
# port = 5432

数据库连接数

数据库服务启动时,内存分配,锁的分配都和连接数有关,当然也不能无限大,默认连接数为100,这里可以根据自己的需求修改, 越大占用的内存和系统资源越多,够用即可;

max_connections = 100

数据库缓存大小

在select查询或insert插入数据时,并不是直接操作磁盘上的文件,而是操作缓存中的数据,如果数据不在缓存中,才会与磁盘进行交互,所以缓存当然是越大越好,能把需要的数据都加载进来,那性能就会提升。

默认是128MB,当然根据自己的数据量和机器的内存来定,如果只是尝试一下,默认也足够了,如果发现磁盘的IO很高,那就需要适当调大一些;

shared_buffers = 128MB 

数据库运行日志

调试过程序的都知道,运行日志的重要性,默认是关闭的,也就是不输出到文件中,建议打开,这样在发生异常时,可以通过运行日志文件来分析;

logging_collector = on 

主机访问控制

数据库有严格的访问控制,可以精确到某个database, user, 或网段,它的配置格式如下

# local         DATABASE  USER  METHOD  [OPTIONS]
# host          DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
# hostssl       DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
# hostnossl     DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
# hostgssenc    DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
# hostnogssenc  DATABASE  USER  ADDRESS  METHOD  [OPTIONS]

我们想到配置远程访问,比如图形化客户端访问,可以加入一行, 允许所有IP可以访问所有数据库,必须使用密码校验。

host    all             all             0.0.0.0/0            md5

七、总结

通过本文,分享了postgresql 数据存储目录-数据集群目录概念,初始化数据库集群,以及一些入门级参数配置,期待您的反馈和加入。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

相关文章:

【postgresql基础入门】 新建数据库服务集群目录,定制属于自己的独享数据区

初始化集群 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君…...

808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议

808协议是指中国国标GB/T 808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议&#xff0c;也被称为JT/T808协议。该协议规定了车辆与监管平台之间的通信规范&#xff0c;用于实现对道路车辆的远程监管和服务。 JT/T808协议主要包含以下几个方面的…...

DDD 与 CQRS 才是黄金组合

在日常工作中&#xff0c;你是否也遇到过下面几种情况&#xff1a; 使用一个已有接口进行业务开发&#xff0c;上线后出现严重的性能问题&#xff0c;被老板当众质疑&#xff1a;“你为什么不使用缓存接口&#xff0c;这个接口全部走数据库&#xff0c;这怎么能抗住&#xff01…...

运维Shell脚本小试牛刀(八): case模式忽略命令行参数大小写演示

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0)&#xff1b; pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 Cenos7安装小火车程序动画 运维Shell脚本小试…...

【个人博客系统网站】项目的发布 · 通过公网IP访问我们的网站 · 思考总结

【JavaEE】进阶 个人博客系统&#xff08;6&#xff09; 文章目录 【JavaEE】进阶 个人博客系统&#xff08;6&#xff09;1. 项目发布1.1 后端代码修改1.1.1 数据库密码1.1.2 端口号修改1.1.3 文件保存地址修改1.1.4 静态资源映射修改 1.2 云服务器1.2.1 建库建表1.2.2 必要…...

网络类型(通信分类)

网络类型是根据数据链路层所使用的协议及规则进行划分&#xff0c;大致可分为两类网络&#xff1a; 点到点&#xff08;p2p&#xff0c;point to point&#xff09;MA&#xff08;multiple access&#xff09;多路访问&#xff1a;BMA、NBMA 不同的网络类型实际为不同的数据链…...

python基础语法(一)

目录 常量和表达式变量和类型变量是什么变量的语法定义变量使用变量 变量的类型整形浮点数(小数)字符串布尔其他 变量为什么会有这么多类型动态类型特征 常量和表达式 python中有许多和C语言相同的知识,但是也有一些不同的知识,比如: print(1 2 - 3)打印12-3的结果 print(1 …...

C语言学习笔记——常见问题

VS执行结果一闪而过 生成的 *.exe 文件打开时会一闪而过&#xff0c;从而观察不到其运行的结果————这是因为 main() 函数结束时&#xff0c;DOS 窗口会自动关闭 1、通过改变设置来解决 按以下顺序打开配通过改变设置来置窗口&#xff1a;项目->属性->配置属性->…...

使用GPU虚拟化技术搭建支持3D设计的职校学生机房(云教室)

背景 学校为职业学校&#xff0c;计算机教室需要进行Maya、Adobe Illustrator、Adobe Dreamweaver、Adobe PhotoShop等软件的教学。每个教室为35用户。资源需求为4核、8G内存、80G硬盘。 基于桌面虚拟化VDI技术的机房在成本、可管理性方面&#xff0c;相对于传统胖终端的机房…...

【C++入门】C语言的不足之处

概要 C入门主要讲的是C语言的一些不足&#xff0c;C作为补充&#xff0c;来补充C的不足之处 C的关键字有63个&#xff0c;C语言有32个&#xff08;作为了解&#xff0c;不需要专门记&#xff09; 变量的命名规则&#xff1a; 变量名必须以字母或下划线开头。变量名只能包含字…...

【已解决】oracle获取最近2学年的数据

已解决 &#xff1a;oracle获取最近2学年的数据 SELECT * FROM (SELECT * FROM xx.JWXT_XSKB WHERE AND xn IN (‘2023-2024’,‘2022-2023’)); 问题 某某系统课表数据过大&#xff0c;要求只获取最近2学年的数据&#xff0c;不能写死。 思路 mysql 在子查询的WHERE子句中…...

【图卷积神经网络】1-入门篇:为什么使用图神经网络(下)

为什么使用图神经网络? 在本书中,我们将重点介绍图学习技术中的深度学习家族,通常称为图神经网络。GNNs是一种新的深度学习架构类别,专门设计用于处理图结构化数据。与主要用于文本和图像的传统深度学习算法不同,GNNs明确地用于处理和分析图数据集(见图1.4)。 图1.4 - …...

AIGC(生成式AI)试用 2 -- 胡言乱语

小时候曾希望做个科学家&#xff0c;才师笑着说&#xff1a;努力、加油&#xff0c;一定会实现的。 也曾说要做个发明家&#xff0c;家人一笑了之&#xff1a;你那笨手笨脚的&#xff0c;想啥呢。 也曾幻想自己要成为英雄&#xff0c;被朋友嘲笑&#xff1a;连架都不敢…...

爬虫逆向实战(30)-某查查股东关联公司(HmacSHA512)

一、数据接口分析 主页地址&#xff1a;某查查 1、抓包 通过抓包可以发现数据接口是api/people/getRelatCompany 2、判断是否有加密参数 请求参数是否加密&#xff1f; 无 请求头是否加密&#xff1f; 通过查看“标头”可以发现&#xff0c;请求头中有一个key和value都是…...

多态(个人学习笔记黑马学习)

多态分为两类 静态多态: 函数重载和 运算符重载属于静态多态&#xff0c;复用函数名动态多态: 派生类和虚图数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定 编译阶段确定函数地址动态多态的函数地址晚绑定 运行阶段确定函数地址 1、基本语法 #include &…...

线程中future/atomic/async及nlohmann json的学习

1)std::future的其他成员函数 wait_for()成员函数&#xff0c;wait_for返回的是一个std::future_status枚举类型,根据返回值做相应处理 std::future_status state result.wait_for(std::chrono::seconds(1)); if(state std::future_status::ready) { cout<<result.get…...

windows安装MongoDB后进入命令交互界面失败解决方案

MongoDB下载链接&#xff1a;https://www.mongodb.com/download-center MongoDB安装教程&#xff1a;https://juejin.cn/post/6844903912000978952 不要安装最新的高版本MongoDB&#xff0c;因为配置方法可能会有差别&#xff0c;比如7.0一直失败的话就换5.0及以下版本试试&am…...

基于Java+SpringBoot+Vue前后端分离高校专业实习管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

E. Hanging Hearts

Problem - E - Codeforces 思路&#xff1a;我们考虑用树形dp&#xff0c;用f[i][0]表示以i为根&#xff0c;并且当前节点不在最长上升子序列中&#xff0c;用f[i][1]表示以i为根&#xff0c;当前节点在最长上升子序列中&#xff0c;那么f[i][0]max(f[j][0],f[j][1])&#xff0…...

docker安装RabbitMQ教程

可以通过Docker来安装RabbitMQ&#xff0c;具体步骤如下&#xff1a; 安装Docker&#xff1a;请参考官方文档进行安装。 拉取RabbitMQ镜像&#xff1a;通过以下命令拉取最新版本的RabbitMQ镜像。 docker pull rabbitmq:latest运行RabbitMQ容器&#xff1a;通过以下命令运行Rab…...

效率倍增:用快马平台智能优化你的openclaw更新工作流

最近在折腾openclaw的更新命令时&#xff0c;发现每次手动输入各种参数和检查依赖实在太费时间了。经过一番摸索&#xff0c;我发现用InsCode(快马)平台可以大幅优化这个流程&#xff0c;今天就把我的经验分享给大家。 智能参数补全 以前最头疼的就是记不住各种参数组合&#x…...

【latex】探索LaTeX中加粗文本的多种方法及其在表格中的优化应用

1. LaTeX加粗文本的多种方法对比 第一次用LaTeX写论文时&#xff0c;我也以为\textbf{}是唯一的加粗方式。直到在表格里发现加粗后的文字会把单元格撑变形&#xff0c;才意识到LaTeX的文本修饰比想象中复杂得多。经过反复测试&#xff0c;我发现实际有5种常用加粗方法&#xf…...

Rk3566 yolov5部署(一)Ubuntu系统镜像烧录与串口调试实战

1. 准备工作&#xff1a;硬件与软件清单 在开始RK3566开发板的Ubuntu系统镜像烧录之前&#xff0c;我们需要准备好必要的硬件和软件工具。我刚开始接触这块开发板时&#xff0c;就因为漏掉了几个小配件耽误了一整天时间&#xff0c;所以特别提醒大家要仔细检查以下清单。 硬件部…...

Phi-4-reasoning-vision-15B多场景落地:已验证的12个企业级视觉理解SOP模板

Phi-4-reasoning-vision-15B多场景落地&#xff1a;已验证的12个企业级视觉理解SOP模板 你是不是也遇到过这样的场景&#xff1f;面对一堆产品图片&#xff0c;需要手动整理描述信息&#xff1b;收到一份复杂的图表报告&#xff0c;要花半天时间分析数据&#xff1b;或者&…...

贪心-摆动序列、不重叠字串数量

Ref 贪心B站搜索-折半搜索 分发饼干 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(),g.end());sort(s.begin(),s.end());int cnt0;for(int i0,j0;i<g.size()&&j<s.size();){if(s[j]&…...

UE5.3与Colosseum集成配置指南及常见问题解析

1. 环境准备&#xff1a;Windows系统下的基础配置 在开始Colosseum与UE5.3的集成之前&#xff0c;我们需要确保开发环境满足基本要求。我最近在Windows 11系统上完成了一次完整配置&#xff0c;实测下来这几个关键组件版本组合最稳定&#xff1a; 操作系统&#xff1a;Windows …...

4个QtScrcpy键鼠映射技巧实现手游操控精准化

4个QtScrcpy键鼠映射技巧实现手游操控精准化 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy 手游操控一直是移…...

AutoDL云服务器避坑指南:从PyTorch到Jupyter,手把手搞定GPU环境配置

AutoDL云服务器GPU环境配置实战&#xff1a;从镜像选择到Jupyter避坑全攻略 第一次在AutoDL这类云GPU平台上配置深度学习环境时&#xff0c;那种既兴奋又忐忑的心情我至今记忆犹新。看着琳琅满目的镜像选项和复杂的版本匹配要求&#xff0c;稍有不慎就会陷入"版本地狱&qu…...

QLVideo:macOS视频管理效率提升的完整解决方案

QLVideo&#xff1a;macOS视频管理效率提升的完整解决方案 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://gitcode.com/g…...

从CISCN2019华北赛区Web1看SQL注入的巧妙绕过技巧

1. 从CISCN2019华北赛区Web1看SQL注入的巧妙绕过技巧 在CTF比赛中&#xff0c;Web安全题目常常会设置各种过滤规则来阻止常见的攻击手法。CISCN2019华北赛区的Web1题目"Hack World"就是一个典型的例子&#xff0c;它通过组合过滤的方式限制了传统SQL注入手段。这道题…...