【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基础入门】 新建数据库服务集群目录,定制属于自己的独享数据区
初始化集群 专栏内容: postgresql内核源码分析手写数据库toadb并发编程 开源贡献: toadb开源库 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君…...
808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议
808协议是指中国国标GB/T 808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议。该协议规定了车辆与监管平台之间的通信规范,用于实现对道路车辆的远程监管和服务。 JT/T808协议主要包含以下几个方面的…...
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能抗住!…...
运维Shell脚本小试牛刀(八): case模式忽略命令行参数大小写演示
运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 Cenos7安装小火车程序动画 运维Shell脚本小试…...
【个人博客系统网站】项目的发布 · 通过公网IP访问我们的网站 · 思考总结
【JavaEE】进阶 个人博客系统(6) 文章目录 【JavaEE】进阶 个人博客系统(6)1. 项目发布1.1 后端代码修改1.1.1 数据库密码1.1.2 端口号修改1.1.3 文件保存地址修改1.1.4 静态资源映射修改 1.2 云服务器1.2.1 建库建表1.2.2 必要…...
网络类型(通信分类)
网络类型是根据数据链路层所使用的协议及规则进行划分,大致可分为两类网络: 点到点(p2p,point to point)MA(multiple access)多路访问:BMA、NBMA 不同的网络类型实际为不同的数据链…...
python基础语法(一)
目录 常量和表达式变量和类型变量是什么变量的语法定义变量使用变量 变量的类型整形浮点数(小数)字符串布尔其他 变量为什么会有这么多类型动态类型特征 常量和表达式 python中有许多和C语言相同的知识,但是也有一些不同的知识,比如: print(1 2 - 3)打印12-3的结果 print(1 …...
C语言学习笔记——常见问题
VS执行结果一闪而过 生成的 *.exe 文件打开时会一闪而过,从而观察不到其运行的结果————这是因为 main() 函数结束时,DOS 窗口会自动关闭 1、通过改变设置来解决 按以下顺序打开配通过改变设置来置窗口:项目->属性->配置属性->…...
使用GPU虚拟化技术搭建支持3D设计的职校学生机房(云教室)
背景 学校为职业学校,计算机教室需要进行Maya、Adobe Illustrator、Adobe Dreamweaver、Adobe PhotoShop等软件的教学。每个教室为35用户。资源需求为4核、8G内存、80G硬盘。 基于桌面虚拟化VDI技术的机房在成本、可管理性方面,相对于传统胖终端的机房…...
【C++入门】C语言的不足之处
概要 C入门主要讲的是C语言的一些不足,C作为补充,来补充C的不足之处 C的关键字有63个,C语言有32个(作为了解,不需要专门记) 变量的命名规则: 变量名必须以字母或下划线开头。变量名只能包含字…...
【已解决】oracle获取最近2学年的数据
已解决 :oracle获取最近2学年的数据 SELECT * FROM (SELECT * FROM xx.JWXT_XSKB WHERE AND xn IN (‘2023-2024’,‘2022-2023’)); 问题 某某系统课表数据过大,要求只获取最近2学年的数据,不能写死。 思路 mysql 在子查询的WHERE子句中…...
【图卷积神经网络】1-入门篇:为什么使用图神经网络(下)
为什么使用图神经网络? 在本书中,我们将重点介绍图学习技术中的深度学习家族,通常称为图神经网络。GNNs是一种新的深度学习架构类别,专门设计用于处理图结构化数据。与主要用于文本和图像的传统深度学习算法不同,GNNs明确地用于处理和分析图数据集(见图1.4)。 图1.4 - …...
AIGC(生成式AI)试用 2 -- 胡言乱语
小时候曾希望做个科学家,才师笑着说:努力、加油,一定会实现的。 也曾说要做个发明家,家人一笑了之:你那笨手笨脚的,想啥呢。 也曾幻想自己要成为英雄,被朋友嘲笑:连架都不敢…...
爬虫逆向实战(30)-某查查股东关联公司(HmacSHA512)
一、数据接口分析 主页地址:某查查 1、抓包 通过抓包可以发现数据接口是api/people/getRelatCompany 2、判断是否有加密参数 请求参数是否加密? 无 请求头是否加密? 通过查看“标头”可以发现,请求头中有一个key和value都是…...
多态(个人学习笔记黑马学习)
多态分为两类 静态多态: 函数重载和 运算符重载属于静态多态,复用函数名动态多态: 派生类和虚图数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定 编译阶段确定函数地址动态多态的函数地址晚绑定 运行阶段确定函数地址 1、基本语法 #include &…...
线程中future/atomic/async及nlohmann json的学习
1)std::future的其他成员函数 wait_for()成员函数,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下载链接:https://www.mongodb.com/download-center MongoDB安装教程:https://juejin.cn/post/6844903912000978952 不要安装最新的高版本MongoDB,因为配置方法可能会有差别,比如7.0一直失败的话就换5.0及以下版本试试&am…...
基于Java+SpringBoot+Vue前后端分离高校专业实习管理系统设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
E. Hanging Hearts
Problem - E - Codeforces 思路:我们考虑用树形dp,用f[i][0]表示以i为根,并且当前节点不在最长上升子序列中,用f[i][1]表示以i为根,当前节点在最长上升子序列中,那么f[i][0]max(f[j][0],f[j][1])࿰…...
docker安装RabbitMQ教程
可以通过Docker来安装RabbitMQ,具体步骤如下: 安装Docker:请参考官方文档进行安装。 拉取RabbitMQ镜像:通过以下命令拉取最新版本的RabbitMQ镜像。 docker pull rabbitmq:latest运行RabbitMQ容器:通过以下命令运行Rab…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
