PostgreSQL “我怎么就连个数据库都不会建?” --- 你还真不会!

文摘   2024-11-22 06:00   中国香港  

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2590人左右 1 + 2 + 3 + 4 +5 + 6 + 7)(1 2 3 4 5 6群均已爆满,新人进7群,开8群)

最近一个干了几年的PostgreSQL同学问我一个问题,说他被嘲笑了,他们公司的老DBA说他连个数据库都不会建,我就问他,PostgreSQL也不是分布式,有新概念,他怎么说的你,怎么就连个数据库都不会建了,不过最后我看他是不大会建数据库。

我将整体的事情还原一下,我觉得还挺有意思的。

DBA: 老师我想问一句,PostgreSQL建立数据库,不就是create database + 数据库名就行了吗? 我这有一个迁移的工作,从ORACLE 那边迁移一一些表过来,然后我这数据库都建上了,我们公司那个老家伙,看完说我根本不会建数据库,气的我要死。但我也不敢问他,每次问完都是我的问题,我想我别挨骂了,我先问问我这样做对不对。

我:命令没有错误,但你做迁移,你几个问题都明白吗?

DBA: 明白什么?

我:字符排序? 这个你没有对照原库来参照一下吗?

DBA:为什么建一个库,要考虑这些,PG这方面有什么要求吗?

我: 你建立数据库的时候,或者说你初始化数据库的时候,你怎么弄的?

DBA: 挺简单的,就编译,然后初始化一下,网上都是这些命令,没有什么难的、

我: 给你三个PG 数据库初始化时使用的命令,你当时安装的时候用的哪个

A initdb --encoding=UTF8 --locale=C -D /pdata/data
  --wal-segsize=64
  
B initdb --encoding=UTF8 --locale=zh_CN.UTF-8 --lc-collate=zh_CN.utf8 --lc-ctype=zh_CN.utf8 -D /pdata/data
  
C initdb --encoding=UTF8 --locale=en_US.UTF-8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8 -D /pdata/data

DBA: 我哪个都没用呀,我就初始化一下而已 initdb -D /var/lib/postgresql/data 这不就和Oracle 安装完,初始化一下一个意思吗?

我:那你没有问一下迁移过来的数据库查询中有没有对一些特殊文字的排序的要求?

DBA:没有,不就是把数据倒过来就行了吗? 我就一个DBA,我管那么多? 还有那个64是什么呀?

我: 你先别问64是什么了? 我觉得你们家老DBA,说你说的有道理

DBA: 哪里有道理,不就是充大辈,没好事,欺负我年轻 !有啥了不起

我: 呵呵,好吧,那就到此为止哈!

DBA: 唉那你还没说,他说的对不对呀,我那错了

我: 你没错,他错了,他应该眼见你掉沟里,然后送上祝福的眼神,他太多嘴了。

DBA: 不是你们这些岁数大的都这么吊,那你说说,我到底哪里错了。

我: 好,咱们说说 

1 你迁移数据库,你问过迁移时那个数据库的查询中排序按照什么规则了吗?

2 你字符集呢,你字符集怎么设置的,你问过原来的数据库上有没有一些特殊的字符

3 如果你问了,你数据库就这么安装 ,这么建立??

DBA:我就一个DBA 我问那么多干嘛? 和我有什么关系

我:来你看看,下面一样的数据,为什么排序完毕后,顺序不一样

CREATE TABLE test_table (
    id SERIAL PRIMARY KEY,
    name TEXT
);

INSERT INTO test_table (name) VALUES
('张三'),
('LiLei'),
('Alice'),
('王五'),
('李四'),
('alice'), 
('Aarav'), 
('123abc'); 

SELECT name FROM test_table ORDER BY name;

name
------
123abc
Aarav
Alice
LiLei
alice
张三
李四
王五

SELECT name FROM test_table ORDER BY name;

name
------
123abc
Aarav
Alice
LiLei
alice
李四
张三
王五

DBA: 这,我哪里知道,和数据有关吧,不就是排序吗?

我: 就排序,原来人家在ORACLE 时候程序输出来的结果,假设是上面的,到你PG库然后输出是下面这样的,人家不找你,啊

DBA : 那我怎么办,看来这还和我有关系了。我是记得是一个人口普查类的,好像是有一些中文的字段排序?

我: 上面第一个是C 排序的,下面的是 zh_CN.UTF-8排序的,这就是区别。

DBA: 那这样,老师,我假设我要中文的我怎么办?你给指个道

我: 1 你初始化数据库的时候,可以考虑locale , --lc-collate 进行特殊的指定 initdb --encoding=UTF8 --locale=zh_CN.UTF-8 --lc-collate=zh_CN.utf8 --lc-ctype=zh_CN.utf8 -D /var/lib/postgresql/data

2 如果你没有,你需要创建数据库的时候,特殊指定 CREATE DATABASE test1 TEMPLATE template0 ENCODING 'UTF8' LC_COLLATE='zh_CN.utf8' LC_CTYPE='zh_CN.utf8';

这样来设定你的数据库默认支持的排序和字符集,当然我这是猜测,还有其他的中文排序的方法,你的和你的ORACLE 上的设置一致。

--lc-collate=zh_CN.utf8: 设置排序规则,适用于中文排序。 

--lc-ctype=zh_CN.utf8: 设置字符分类,支持中文字符集。



这只是PG上设置中文的一种而已,其他的你自己去查。

DBA : 哦我明白了,那个还有为什么你创建数据要带上 template0 呀,还有那个你初始化的时候为什么带上 64呀?

是呀为什么呢?


总结: “天下聪明俊秀不少,所以德不加修,业不加广者,只为因循二字,耽阁一生。”


-----------------------------------------------
参考:
CREATE DATABASE testdb
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    LC_COLLATE = 'zh_CN.utf8'
    LC_CTYPE = 'zh_CN.utf8'
    TEMPLATE = template0
    CONNECTION LIMIT = -1;
    ···

  • OWNER = postgres
    数据库的所有者,默认为当前执行命令的用户,通常是postgres。可以指定其他用户。

  • ENCODING = 'UTF8'
    数据库的字符编码,这里选择UTF8,兼容多语言字符集。

  • LC_COLLATE = 'zh_CN.utf8'
    排序规则,指定为中文环境的拼音排序。

  • LC_CTYPE = 'zh_CN.utf8'
    字符分类规则,适用于中文字符。

  • TEMPLATE = template0
    强制使用template0 创建数据库,以避免继承默认模板中的区域设置。

  • CONNECTION LIMIT = -1
    允许的最大连接数,-1 表示不限制。


  • 我们最后整理一下建立一个数据库(逻辑)表到底需要考虑什么





PostgreSQL 相关文章


PostgreSQL 事务读取行 不使用行锁 真的? 利弊双刃剑

病毒攻击PostgreSQL暴力破解系统,防范加固系统方案(内附分析日志脚本)
PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜

PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆

PostgreSQL 如何通过工具来分析PG 内存泄露

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?

POSTGRESQL --Austindatabaes 历年文章整理

PostgreSQL  查询语句开发写不好是必然,不是PG的锅

PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)
PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了
PostgreSQL DBA硬扛 垃圾 “开发”,“架构师”,滥用PG 你们滚出 !(附送定期清理连接脚本)

DBA 失职导致 PostgreSQL 日志疯涨


OceanBase 相关文章


跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)
跟我学OceanBase4.0 --阅读白皮书 (旧的概念害死人呀,更新知识和理念)

聚焦SaaS类企业数据库选型(技术、成本、合规、地缘政治)

OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
OceanBase  学习记录 -- 安装简易环境
OceanBase  学习记录 --  开始入门
数据库最近第一比较多,OceanBase 定语加多了?
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
数据库信息速递  阿里巴巴的分布式数据库OceanBase旨在进军中国以外的市场 (翻译)



PolarDB 相关文章



PolarDB-MySQL 并行技巧与内幕--(怎么薅羊毛)

PolarDB 并行黑科技--从百套MySQL撤下说起 (感谢8018个粉丝的支持)

PolarDB 杀疯了,Everywhere Everytime Everydatabase on Serverless

POLARDB  从一个使用者的角度来说说,POALRDB 怎么打败 MYSQL RDS

PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈

PolarDB 从节点Down机后,引起的主从节点强一致的争论

PolarDB serverless 真敢搞,你出圈了你知道吗!!!!

PolarDB VS PostgreSQL  "云上"性能与成本评测 -- PolarDB 比PostgreSQL 好?

临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一

PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)

POLARDB  -- Ausitndatabases 历年的文章集合

PolarDB for PostgreSQL  有意思吗?有意思呀

PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?


MongoDB 相关文章



MongoDB 使用网上妙招,直接DOWN机---清理表碎片导致的灾祸 (送书活动结束)

数据库 《三体》“二向箔”  思维限制 !8个公众号联合抽奖送书 建立数据库设计新思维

MongoDB  是外星人,水瓶座,怎么和不按套路出牌的他沟通?

17000多张MongoDB表的锅 自动分析删除表数据难题--从头到尾的处理过程(文尾有MongoDB开发规范)
MongoDB 插入更新数据慢,开发问哪的问题?附带解决方案和脚本
MongoDB 不是软柿子,想替换就替换
MongoDB  挑战传统数据库聚合查询,干不死他们的MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB  双机热备那篇文章是  “毒”
MongoDB   会丢数据吗?在次补刀MongoDB  双机热备
MONGODB  ---- Austindatabases  历年文章合集


MySQL相关文章


MySQL timeout 参数可以让事务不完全回滚
"DBA 是个der" 吵出MySQL主键问题多种解决方案

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
用MySql不是MySQL, 不用MySQL都是MySQL 横批 哼哼哈哈啊啊
MYSQL  --Austindatabases 历年文章合集

阿里云系列

阿里云数据库产品权限设计缺陷 ,六个场景诠释问题,你可以做的更好?

阿里云数据库--市场营销聊胜于无--3年的使用感受与反馈系列

阿里云数据库产品 对内对外一样的卷 --3年阿里云数据库的使用感受与反馈系列

阿里云数据库使用感受--客户服务问题深入剖析与什么是廉价客户 --3年的使用感受与反馈系列

阿里云数据库使用感受--操作界面有点眼花缭乱 --3年的使用感受与反馈系列



SQL SERVER 系列

SQL SERVER 如何实现UNDO REDO  和PostgreSQL 有近亲关系吗
SQL SERVER 2022 针对缓存扫描和Query Store 的进步,可以考虑进行版本升级

临时工访谈系列

本地存储还有活路吗? 从上周一个供应商问我的问题开始
一年又一年,成了老梆子,别回头,往前看!
Oracle 离婚后,过的挺好,你别惦记了
临时工说: 实际实例揭穿AI, 上云就不用DBA的谎言
临时工说:DBA 7*24H 给2万的工作,到底去不去?
国内最大IT服务公司-招聘DBA “招聘广告”的变化--分析与探讨
临时工说:  网友问35岁就淘汰,我刚入行DBA 怎么办?

截止今天共发布1256 篇





AustinDatabases
PostgreSQL ACE ,PolarDB 3年, OceanBase 极速学习ING, MongoDB 8年经验, MySQL OCP, SQL SERVER, MCITP,REDIS ,做一个合格的数据库架构师
 最新文章