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 是行的物理位置,可能随数据更新而变化。

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

相关推荐
老当益壮梁奶奶40 分钟前
51单片机入门总结(一):基本概念、最小系统、流水灯与按键实验(附完整代码)
笔记·stm32·单片机·嵌入式硬件·51单片机
M78佐菲41 分钟前
51单片机学习笔记(2)
linux·笔记·嵌入式硬件·学习·51单片机
LeeAmos11 小时前
CMIS V5.3 中文版
笔记
今儿敲了吗1 小时前
01词频统计器
笔记·python
浔溺1 小时前
al+大数据每日学习笔记37
大数据·笔记·学习
TheBestRucy1 小时前
PyTorch 基本使用学习笔记
pytorch·笔记·学习
志尊宝1 小时前
Vue3 零基础每日笔记(016):v-for 列表渲染——key 的作用与为什么不能用 index
javascript·vue.js·笔记
ouynagda1 小时前
51 单片机 LED 流水灯 + 数码管动态扫描学习笔记(STC89C52)
笔记·单片机·学习
智者知已应修善业2 小时前
【如何将此图变为000到101就返回】2026-4-7
驱动开发·经验分享·笔记·硬件架构·硬件工程