修改字段类型_PostgreSQL 关于字段类型的修改 谣言与止谣

67b4ae5b105bfe2fa6aea515130bfb71.png

PostgreSQL 在9.2 之前是要面临一个指责,就是在更改字段类型的时候带来的不堪,假象你有100万行的数据,其中一个字段是varchar(20) ,你想将其更改为 varhcar(30), 这可能就要造成一个灾难,熟悉postgresql 原理的人们,马上就想到,可能要生成一个“新表”了。导致Postgres重写表的每一行,这可能是一个非常昂贵的操作(就磁盘I/O和挂钟时间而言),MYSQL 早期的版本也没有好到哪里去,可是这对难兄难弟,都会成长。

PostgreSQL 在9.2 之后修改字段的大小,例如 varchar(20) ---> varchar(30) 返回修改仅仅是一瞬间的事情。

所以现在如果还有人说,PG修改字段的大小太差劲,那我到是觉得活在上世纪的 someone 可以清理一下内存了,终归新的东西是要不断学习的,你去看看现在的MYSQL 8 如果你的知识还保留在 MYSQL 5.5 ,那你一定也需要更新了。

那问题1 如果你还在使用PG 9.2 之前的版本,并继续受到这个问题的缠绕,怎么办

1 升级数据库版本 (当然这个说法估计支持的声音不少,但实际上做的人不多,因为牵扯的资源和人太多,没有人愿意在没有占有这个数据库系统的开发或者第三方开发商的支持下去做这个事情)

2 建议将字段更换为text字段,(或者经常需要变动的文字的字段),

ALTER TABLE test ALTER COLUMN puzzle TYPE text;ALTER TABLE test ADD CONSTRAINT checksum_lengthCHECK (LENGTH(puzzle) <= 32);我们先看看这个方法合适吗,这个方法当然合适,字段的扩充可以换个思路,我们可以给的无限,然后后面通过约束限制一下,这样DBA 和开发其实都开心
03ccd8b67fb925f7aeae33778af9ad81.png

当然也有人说,你加完约束,系统的性能会受到影响,来来来我们做一个测试,插入1百万的数据,仅仅需要6秒多.

5e122607be71fb789ff4e676567d9d0d.png

当然这并不是本期主要的话题,本期的主要话题是

这里要澄清的是,不是所有的PG 的 Alter Column type 操作都要进行重建表的操作(这里先不牵扯索引的事情)

8975258ab265142ab331dda3ad311af9.png
ab3346b10db8d5a28dcaa1be34f3b22b.png

这就是今天要进行测试的表,PG的版本 PG 12.2

测试如下

1 name 的类型从 char 变为 varchar 在变成 text

3307e3f604e1f439287daab6e53e7dd8.png
4d7768ed78b126864a68539542b8467c.png

2 将上面的变化在变回来

将整形从小变大 从大变小,将日期类型进行变化

b6acf58c9b0505950f2d84fc6e568863.png

这些都是需要重写的

说完这些可能还有些人有疑问

1 添加一个字段呢,添加一个带默认值的字段呢

2 删除一个字段呢

3 更改一个字段的名字呢

598384d7162207dd18ade61335c467d4.png

结果是这些都不需要重写,另外在PG11 已经解决了关于 默认值的问题,这个问题,其实在有的商业数据库到很新的版本还是一个问题。

最后是关于索引的问题,这里PG 建立索引尽量要使用

CREATE INDEX CONCURRENTLY idx_add_c on type_change (add_c);

根据PG 的原理来说,我们在建立索引如果不使用 concurrently 参数则建立索引时表要 获取一个 access exclusive 的锁,而如果我们使用了 concurrently 则我们会获得一个 share update exclusive 的锁。所以使用了concurrently 则会允许在索引建立的同时继续读取数据和写入数据,当然也有一些副作用,今天就不说了,这个 concurrently 其实也可以找一期说一下,也是有点意思。

4535563e17eca8218f34099c432aeb14.png
70fa5e780476e6bf3c41308cec9fad6c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户 'IIS APPPOOL\***' 登录失败(转载)

用户 IIS APPPOOL\DefaultAppPool 登录失败。 我在windows8中安装了iis之后添加了我做的网站打开之后提示用户 IIS APPPOOL\DefaultAppPool 登录失败。 我再vs2010中能正常运行 最佳答案 这是设置iis应用程序池的设置问题。我就遇到了这样的问题。 比如我的网站取名myweb…

完全相同的4个小矩形如图所示放置_吸睛!矩形在PPT中的创意表现

如何在PPT中表现出光效来&#xff1f;这是很多人在制作PPT时都可能会面临的问题&#xff0c;大多数人的常规做法就是在许多素材网站中直接寻找&#xff0c;比如在花瓣中直接搜索"光效"&#xff0c;我们可以得到以下结果&#xff1a;这些光效PNG文件可以直接用在我们的…

LeetCode 1801. 积压订单中的订单总数(map)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 orders &#xff0c;其中每个 orders[i] [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。 订单类型 orderTypei 可以分为两种&#xff1a; 0 表示这是一批采购订单 buy1 …

quantaxis 云服务器_量化金融策略开源框架:QUANTAXIS

简介&#xff1a; QUANTAXIS量化金融策略框架,是一个面向中小型策略团队的量化分析解决方案&#xff0c;是一个从数据爬取、清洗存储、分析回测、可视化、交易复盘的本地一站式解决方案。QUANTAXIS量化金融策略框架,是一个面向中小型策略团队的量化分析解决方案&#xff0c;是一…

listrecord根据某个属性去重_去哪网开发实战记录(9):城市选择页(中)

兄弟组件之间的联动所谓的兄弟组件之间的联动&#xff0c;其实就是实现点击右侧的字母就能跳转至对应的首字母城市&#xff0c;因此列表组件需要知道右侧的字母列表的点击事件所对应的元素字母&#xff0c;这就需要兄弟组件间的数据传递了(Alphabet组件与List组件之间的通信)&a…

写接口是什么意思啊_科普贴:果汁包装上写NFC到底是什么意思?

比起水果&#xff0c;果汁省去了繁杂的处理步骤&#xff0c;选对了能更快地补充营养。今天麦德龙美厨课堂就为大家推荐METRO Chef NFC100%果汁系列&#xff0c;给你真材实料、原汁原味的营养美味。NFC果汁&#xff1a;真材实料 原汁原味如今果汁饮品市场上品类繁杂&#xff0c;…

LeetCode 1802. 有界数组中指定下标处的最大值(思维题)

文章目录1. 题目2. 解题1. 题目 给你三个正整数 n、index 和 maxSum 。 你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length nnums[i] 是 正整数 &#xff0c;其中 0 < i < nabs(nums[i] - nums[i1]…

Linux单用户能做什么,Linux单用户模式详解 及应用场景

一、单用户模式简介二、进入单用户模式修改密码1、Centos6进入单用户修改密码1、重启系统&#xff0c;进入系统欢迎界面按上下左右键进入GRUB界面&#xff1b;2、在GRUB界面选择内核版本&#xff0c;按下e键&#xff1b;3、在此界面可以进行编辑&#xff0c;在最后输入single再…

简单阻容降压电路图_升压降压芯片电路

升压与降压一般是指电源电路的工作模式&#xff0c;有些电源IC可以同时支持升压和降压模式。降压模式——Bust mode&#xff0c;这个大家比较熟悉的&#xff0c;用的也比较多&#xff0c;比如5V-》3.3V稳压&#xff0c;对应的芯片很多大家上网搜一下就有了&#xff0c;有LDO模式…

linux终端分辨率对应表,Linux下设置终端分辨率,最全的VGA代码和分辨率对照表...

一般安装完linux后默认的kernel给的tty分辨率是非常有限的,解决的方法就是给kernel传递VGA参数。对应的要修改的配置文件为 /etc/grub.conf,(或者 /boot/grub/grub.conf)就是在grub.conf启动列表的kernel最后添加vga参数 vgaxxxx, 这个在网上大家列出的解决方案都是大同小异&…

android文件存储位置切换

最近有个需求&#xff0c;助手的google卫星地图和OpenCycleMap下载的离线地图数据&#xff0c;要能够在内置存储和外置存储空间之间切换&#xff0c;因为离线瓦片数据非常大&#xff0c;很多户外用户希望将这些文件存储在外置TF卡上&#xff0c;不占用内置存储空间&#xff0c;…

[c]扫雷

题目描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。 玩家翻开一个非地雷格时&#xff0c;该格将会出现一个数字——提示周围格子中…

netcore docker_让.NetCore程序跑在任何有docker的地方

一.分别在Windows/Mac/Centos上安装DockerWindows上下载地址&#xff1a;https://docs.docker.com/docker-for-windows/install/&#xff08;window上安装的常见问题和解决方案请参考下方步骤六&#xff09;Mac上下载地址&#xff1a;https://hub.docker.com/editions/communit…

MapReduce 编程实践

文章目录1. MapReduce 作业流程2. 实践2.1 启动 hadoop2.2 创建 java 项目2.3 MapReduce shell2.4 MapReduce Web UI3. MapReduce 编程实践&#xff1a;统计对象中的某些属性参考书&#xff1a;《Hadoop大数据原理与应用》1. MapReduce 作业流程 2. 实践 2.1 启动 hadoop sta…

MapReduce 编程实践:统计对象中的某些属性

文章目录1. 生成数据2. 编写实体类3. Mapper类4. Reducer类5. Driver类6. 运行参考书&#xff1a;《Hadoop大数据原理与应用》 相关文章&#xff1a;MapReduce 编程实践 1. 生成数据 超市消费者 数据&#xff1a; id&#xff0c; 时间&#xff0c;消费金额&#xff0c;会员/…

超级签名源码_企业签名和超级签名有哪些区别?

我们知道iOS系统对于非App Store中的应用是有安装限制的&#xff0c;而App Store严格的审核机制又将许多APP拒之门外&#xff0c;这令不少开发者们郁闷不已。所以很多开发者们会选择苹果签名的方式&#xff0c;让自己的iOS APP可以不经过App Store就安装在用户的苹果手机上&…

天池 在线编程 到达终点

文章目录1. 题目2. 解题1. 题目 描述 A robot is located in a pair of integer coordinates (x, y). It must be moved to a location with another set of coordinates. Though the bot can move any number of times, it can only make the following two types of moves:…

第十七节(is-a 、is-like-a 、has-a,包和 import )

is - a 类与类之间的继承关系&#xff1b;is - like - a 类与接口之间的关系&#xff1b;has - a 关联关系&#xff1b; public class Animal{public void method01();}// 类与类之间的关系class Dog extends Animal{ // Dog is a Animal} /// public interface I{public void…

quartz获取开始结束时间_Springboot集成quartz

Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。本文描述在springboot 2.x环境下怎么集成quartz。一、添加quartz到项目中在pom.xml中加入 <dependency>特别注意application入口类的注解&#xff0c;这里一定…

linux 添加本地磁盘,XenServer如何添加本地存储

在一次测试中&#xff0c;发现本地有两块磁盘&#xff0c;但是只有一块磁盘在XenServer中显示出来&#xff0c;另外一块没有显示。本地只有一个Local storage。查询KB后&#xff0c;发现XenServer可以添加多块本地存储。详情&#xff0c;请见KB&#xff1a;CTX121313详细添加如…