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

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

相关推荐
柳鲲鹏2 小时前
内斗学概论:43、平级内斗
笔记
星恒随风4 小时前
MySQL 从零入门(四):表的增删改查与基础查询详解
linux·服务器·数据库·笔记·mysql
Z21-X5 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
晓梦林10 小时前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
David猪大卫1 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
星恒随风1 天前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
蒸蒸yyyyzwd1 天前
从后端面经学到的 3 个知识
笔记·学习
17岁的勇气1 天前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
坤坤子吖1 天前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
路灯上の马陈1 天前
Java 内部类 学习笔记
笔记·学习