PostgreSQL 使用 ctid 修改完全重复的行

场景

表没有主键,且存在内容完全相同的多行数据:

dept_id name
1001 张三
1001 张三

普通字段无法唯一定位某一行。

使用 ctid

ctid 是 PostgreSQL 的系统列,可以临时唯一定位当前行。

查询

sql 复制代码
SELECT ctid, *
FROM employee;

结果:

text 复制代码
ctid   | dept_id | name
-------+---------+------
(0,1)  | 1001    | 张三
(0,2)  | 1001    | 张三

修改指定行

sql 复制代码
UPDATE employee
SET name = '王五'
WHERE ctid = '(0,1)';

注意

ctid 是行的物理位置,可能随数据更新而变化。

适合临时处理重复或脏数据,不适合作为主键长期使用。

相关推荐
Horn Still Sounds6 小时前
IMX6ULL裸机|I2C通信协议 + ADC模数转换学习笔记
arm开发·笔记·单片机·嵌入式硬件
有范先生9 小时前
这次户外断粮危机后,我更在意主食能不能扛住极端环境了
笔记
喜欢打篮球的普通人10 小时前
MiniMind 学习笔记(十二):Pretrain 实操——从版本梳理到 8GB 显卡上的真实训练
人工智能·笔记·学习
坤坤子吖11 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
Answer1st12 小时前
【HAL库】嵌入式思路(一)
笔记
AOI小白新手上路12 小时前
深度学习模块缝合方法论 · 人物蒸馏笔记
人工智能·笔记·深度学习
AOI小白新手上路12 小时前
韦东山 3-5 I.MX6ULL 的 LED 编程 · 学习笔记
arm开发·笔记·单片机·学习·架构·硬件架构
M78佐菲13 小时前
ARM学习笔记(9)
linux·arm开发·笔记·嵌入式硬件·学习
東隅已逝,桑榆非晚14 小时前
priority_queue的介绍和使用
c++·经验分享·笔记·学习
驭渊的小故事14 小时前
MyBatis 入门:从 JDBC 到优雅操作数据库(一)
笔记·sql·spring