查阅了大量资料,比如某度,某乎,一堆人都在吹捧PostgreSQL,似乎和PostgreSQL相恨见晚,马上要甩掉MySQL。
其实总结一下,大多数文章都在重提MySQL的痛点,让一些老用户回味起来踩坑的历史,让一下正在坑里的用户感到悲伤,好在我还比较理智。
理智的原因:MySQL被用了这么多年,还是一直有人在用,正说明了他还有优势,至少在大众层面PostgreSQL还没有MySQL那么普及。
至于在其他领域,无非是以下两点:
1. 收费问题
2. 需要一些MySQL无法提供的功能
说到MySQL,对于一个数据量不大的我来说,至少有一点我是非常喜欢的,那就是他的自增字段,就非常方便嘛。
书归正传,我今天是要写 PostgreSQL 的。
首先,PostgreSQL 优势,历史等等没准备去讲,因为网上一大堆,喜欢用那个,还是要看自己的喜好。那个,还有一个就是很多说PostgreSQL的全文检索,吐槽以下,我觉得一个数据库嘛,有这功能更好,取代elastic就没必要了吧,毕竟不是一个领域的,一个存储+使用,一个是专门做索引,人家elastic提供这么快的搜索方案,而且也是开源免费的,招谁惹谁了,还有人家本来也不单单能对接数据库呀,人家分析日志等海量数据多么给力,您能想想把日志数据丢到PostgreSQL里做全文检索么?
然后说说安装,我是从Windows下测试的。因为内网都是windows服务器,我也是醉了。
先到网站去下载,Windows版本有2种方式,一个是安装文件,一步一步执行,一种是解压就运行的,通常叫做绿色版,我个人比较钟情于绿色版。所以选择后者。
下载后,解压到D盘,路径d:\pgsql,很简短,我很喜欢。
翻了一下bin目录下文件,一眼看到 initdb,猜想可能是初始化数据库,信手就是一行命令
D:\pgsql>bin\initdb.exe
initdb: 错误: 没有指定数据目录
您必须确认此数据库系统的数据所在目录
存在. 使用 -D 选项或者
环境变量 PGDATA.
提示我没有用-D选项置顶数据目录,好,再来一个:
D:\pgsql>bin\initdb.exe -D d:\pgsql\data
属于此数据库系统的文件宿主为用户 "fanshengshuai".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "Chinese (Simplified)_China.936"进行初始化.
本地化隐含的编码 "GBK" 不允许作为服务器端的编码.
默认的数据库编码将采用 "UTF8" 作为代替.
initdb: 无法为本地化语言环境"Chinese (Simplified)_China.936"找到合适的文本搜索配置
缺省的文本搜索配置将会被设置到"simple"
禁止为数据页生成校验和.
创建目录 d:/pgsql/data ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......windows
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
选择默认时区 ... Asia/Shanghai
创建配置文件 ... 成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
同步数据到磁盘...成功
initdb: 警告: 为本地连接启用"trust"身份验证
你可以通过编辑 pg_hba.conf 更改或你下次
执行 initdb 时使用 -A或者--auth-local和--auth-host选项.
成功。您现在可以用下面的命令开启数据库服务器:
^"bin^\pg^_ctl^" -D ^"d^:^\pgsql^\data^" -l 日志文件 start
提示我成功了,并且给了我一句开启服务器的命令,这个不得不说,很人性化,上面的日志也很全。看到上面的GBK和UTF8的一堆,不知所云,看起来是GBK被替换成UTF8编码做存储了。所以到了这里才想到到去翻翻文档。百度了一下:PostgreSQL: Documentation: 14: initdbhttps://www.postgresql.org/docs/current/app-initdb.html不得不吐槽,官方英文的,虽然我英文水平还可以,但也不愿看不是母语的文字,综合了国内几个人文章,这里就不提出处了,因为一搜一把,都是一样的,不知道最初出自哪里的,得出以下常用参数,并拼出了一个比较全的命令语句。
-D directory/--pgdata=directory
此选项指定应该存储数据库集群的目录。必传。也可以设置环境变量PGDATA来替换-D选项。
-U username/--username=username
选择数据库superuser的用户名。这默认为运行initdb的用户的名称。
-E encoding/--encoding=encoding
选择模板数据库的编码。这也是您稍后创建的任何数据库的默认编码,
--lc-collate/--lc-ctype
更改默认的排序顺序或字符集类。
-k/--data-checksums
在数据页上使用校验和来帮助检测I/O系统的损坏,否则系统将是静默的。启用校验和可能会导致显著的性能损失。如果设置,则计算所有数据库中所有对象的校验和。所有校验和失败将在pg_stat_database视图中报告。
命令如下
bin\initdb.exe -D d:\pgsql\data --encoding=UTF8 --lc-collate=C --lc-ctype=en_US.utf8 --data-checksums --username=root
这里指定了数据存放目录,并指定了编码,同事指定了用户名为 root,个人比较喜欢 root,执行效果如下(先删除d:\pgsql\data):
D:\pgsql>bin\initdb.exe -D d:\pgsql\data --encoding=UTF8 --lc-collate=C --lc-ctype=en_US.utf8 --data-checksums --username=root
属于此数据库系统的文件宿主为用户 "fanshengshuai".
此用户也必须为服务器进程的宿主.
数据库簇将带有一下 locales 初始化
COLLATE: C
CTYPE: en_US.utf8
MESSAGES: Chinese (Simplified)_China.936
MONETARY: Chinese (Simplified)_China.936
NUMERIC: Chinese (Simplified)_China.936
TIME: Chinese (Simplified)_China.936
缺省的文本搜索配置将会被设置到"english"
允许生成数据页校验和.
创建目录 d:/pgsql/data ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......windows
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
选择默认时区 ... Asia/Shanghai
创建配置文件 ... 成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
同步数据到磁盘...成功
initdb: 警告: 为本地连接启用"trust"身份验证
你可以通过编辑 pg_hba.conf 更改或你下次
执行 initdb 时使用 -A或者--auth-local和--auth-host选项.
成功。您现在可以用下面的命令开启数据库服务器:
^"bin^\pg^_ctl^" -D ^"d^:^\pgsql^\data^" -l 日志文件 start
赶紧执行以下启动命令:
D:\pgsql>^"bin^\pg^_ctl^" -D ^"d^:^\pgsql^\data^" -l 日志文件 start
等待服务器进程启动 .... 完成
服务器进程已经启动
提示服务器进程启动了。^_^,一路没有波澜。
赶紧拿出我们的数据管理工具连一连:
完美。
停止的话,就是上面的 start 改成 stop,这是常识了:
^"bin^\pg^_ctl^" -D ^"d^:^\pgsql^\data^" -l 日志文件 stop