`
redish
  • 浏览: 30664 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

PostgreSQL删除表中重复数据行

 
阅读更多
采用PostgreSQL 9.2 官方文档例子为例:

CREATE TABLE weather (
city      varchar(80),
temp_lo  int,          -- low temperature
temp_hi  int,          -- high temperature
prcp      real,        -- precipitation
date      date
);

INSERT INTO weather VALUES
('San Francisco', 46, 50, 0.25, '1994-11-27'),
('San Francisco', 43, 57, 0, '1994-11-29'),
('Hayward', 37, 54, NULL, '1994-11-29'),
('Hayward', 37, 54, NULL, '1994-11-29');  --- duplicated row

这里有3中方法:

第一种:替换法

-- 剔除重复行的数据转存到新表weather_temp
SELECT DISTINCT city, temp_lo, temp_hi, prcp, date
INTO weather_temp
FROM weather;
-- 删除原表
DROP TABLE weather;
-- 将新表重命名为weather
ALTER TABLE weather_temp RENAME TO weather;

或者

-- 创建与weather一样的表weather_temp
CREATE TABLE weather_temp (LIKE weather INCLUDING CONSTRAINTS);
-- 用剔除重复行的数据填充到weather_temp中
INSERT INTO weather_temp SELECT DISTINCT * FROM weather;
-- 删除原表
DROP TABLE weather;
-- 将新重命名为weather.
ALTER TABLE weather_temp RENAME TO weather;

通俗易懂,有很多毁灭性的操作如DROP,而且当数据量大时,耗时耗空间。不推荐。

第二种: 添加字段法

-- 添加一个新字段,类型为serial
ALTER TABLE weather ADD COLUMN id SERIAL;
-- 删除重复行
DELETE FROM weather WHERE id
NOT IN (
SELECT max(id)
FROM weather
GROUP BY city, temp_lo, temp_hi, prcp, date
);
-- 删除添加的字段
ALTER TABLE weather DROP COLUMN id;

需要添加字段,「暂时不知道Postgres是如何处理添加字段的,是直接在原表追加呢,还是复制原表组成新表呢?」,如果是原表追加,可能就会因为新字段的加入而导致分页(一般block: 8k),如果是复制的话那就罪过了。不好。

第三种:系统字段[查看 System Columns]

DELETE FROM weather
WHERE ctid
NOT IN (
SELECT max(ctid)
FROM weather
GROUP BY city, temp_lo, temp_hi, prcp, date
);

针对性强[Postgres独有],但是简单。
分享到:
评论

相关推荐

    IntraArchiveDeduplicator:用于管理现有压缩存档文件中的重复数据删除的工具,以及用于模糊图像搜索的性能相对较高的BK树实现

    用于管理现有压缩存档文件中的重复数据删除的工具,重点是Manga / Comic-book存档文件。 这是一个颇为奇特的工具,旨在允许压缩档案中的文件相当快的重复检测。 它为所有扫描的文件维护一个哈希数据库,并且实际上...

    用视图自定义PostgreSQL数据库查询

    PostgreSQL数据库中最有用的功能之一就是创建自定义“视图”,这些视图仅仅是预先定义的SQL查询,它们存储在数据库中并可以在需要时重复使用。因此,以这种方式储存经常使用的SQL查询比每次都手工输入要更有效率而且...

    【最新版】navicat150_premium_en.dmg navicat-premium: 15.0.14【亲测可用】最好的MySQL数据库开发工具

    我们的图表功能使您可以创建大型数据集的可视表示形式,并帮助您从数据中获得更深刻的见解。探索并发掘数据之间的模式,趋势和关系,并创建有效的视觉输出,以将您的发现显示在仪表板上以进行共享。 我们功能强大的...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    maku-generator是一款低代码生成器,可根据自定义模板内容,快速生成代码.rar

    支持通过配置数据源,快速生成 CRUD 代码,减少重复工作 支持 MySQL、Oracle、SQLServer、PostgreSQL、达梦 8 等主流的数据库 支持第三方 Java 项目包名修改,修改包名变得简单快速 支持批量导入表、批量生成代码...

    Navicat Premium12

    使用数据表样式的网格查看以及一系列数据编辑工具来添加、修改和删除记录,方便你编辑数据。Navicat 为你提供有效管理数据所需的工具,并确保能顺利进行。 简单的 SQL 编辑 视觉化 SQL 创建工具助你创建、编辑和运行...

    SQL必知必会(第3版)--详细书签版

    14.2.3 包含或取消重复的行 92 14.2.4 对组合查询结果排序 93 14.3 小结 94 第15章 插入数据 95 15.1 数据插入 95 15.1.1 插入完整的行 95 15.1.2 插入部分行 98 15.1.3 插入检索出的数据 99 15.2 从一个表...

    file_db:将目录和文件元数据(包括文件哈希)加载并维护到postgres数据库中,并通过SQL提供对文件系统的控制

    查询文件系统file_db工具将文件和目录的元数据从Windows,Linux或OSX加载到PostgreSQL数据库中,以便于分析和控制文件系统。 有捆绑的交互式外壳,易于使用,或者高级用户可以使用自定义应用程序和插件直接挂接到...

    开源免费数据库管理工具 DBeaver Community Edition 21.0.5 中文.zip

    如果选择一个表,则可以查看有关该表的常规详细信息,例如列,外键,使用的触发器,分区甚至DDL语法(用于定义数据结构,尤其是数据库模式)。 轻松创建SQL脚本 通过“项目”面板,您可以查看所有可用的连接以及...

    SQL必知必会(第3版-PDF清晰版)part1

    重复的行..... 92 14.2.4 对组合查询 结果排序..... 93 14.3 小结..... 94 第15章 插入数据...... 95 15.1 数据插入..... 95 15.1.1 插入完整的行..... 95 15.1.2 插入部分行..... 98 15.1.3 插入检索出 的数据.......

    php网络开发完全手册

    16.2 数据库中的程序逻辑与数据的关系 262 16.3 存储过程的设计 263 16.3.1 定界符重定义 263 16.3.2 存储过程的创建与调用 264 16.3.3 存储过程的参数 265 16.3.4 复合语句 267 16.3.5 变量 268 16.3.6 条件语句 ...

    Python Cookbook

    7.11 在PostgreSQL中储存BLOB 296 7.12 在SQLite中储存BLOB 298 7.13 生成一个字典将字段名映射为列号 300 7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库游标的内容 304 7.16 适用于各种DB API...

    Pewlett-Hackard分析

    Pewlett-Hackard分析 利用PostgreSQL建立员工数据库,并通过应用数据建模,数据工程师和数据分析技能... 2-第二个表格中,我们删除了多年来员工可能转换过的职称的重复职称,并且仅保留每位员工的最新职称。 3-第三个

    初级java笔试题-awesome:我的GitHub星星的精选列表!由[starred](https://github.com/maguowe

    具有压缩和认证加密的重复数据删除归档器。 - 适用于 Windows 和 OS X 的 LICEcap 简单动画屏幕捕获工具 - Redshift 根据您的环境调整屏幕的色温。 如果您晚上在屏幕前工作,这可能有助于减轻您的眼睛伤害。 - H

    分类:梅蒂斯项目3

    我检查了空值并删除了重复的行,并开始了一些功能设计。 UCI指出,观察是按日期排序的,从2008年5月至2010年11月,因此我能够为每个观察添加年份。 我还通过合并现有功能(例如将各个年龄段划分为年龄段)来创建新...

    awesome-sysadmin:受Awesome PHP启发的令人敬畏的开源sysadmin资源精选列表

    用Python编写的重复数据删除备份程序。 另一个客户端-服务器模型备份工具。 -Bacula备份工具的分支。 备份和恢复管理器,用于PostgreSQL服务器的灾难恢复。 轻巧,可扩展的元备份系统。 具有文件池方案的...

    asp在线考试系统(asp+access实现)

    不过,对于各表中的主键不用修改,避免了造成系统中的数据混乱,或者覆盖其它有用数据的现象。如果用户执行了非法操作,则必须重新操作。 (3)试题删除 管理员可以删除不再需要的试题。 2. 科目管理 (1)添加科目 其...

    kaunda_submission

    然后删除它们或将其适当地替换为0s空白或平均值2测试重复-我做了3测试离群值,然后决定如何处理离群值,无论是日期还是平均值等-确实4确保日期是日期,并且格式统一且正确-确实5确保每个类型/列包含相同的数据类型- ...

    ASP设计在线考试系统OnlineTest

    不过,对于各表中的主键不用修改,避免了造成系统中的数据混乱,或者覆盖其它有用数据的现象。如果用户执行了非法操作,则必须重新操作。 (3)试题删除 管理员可以删除不再需要的试题。 2. 科目管理 (1)添加科目 其...

    Diboot轻代码开发平台-其他

    7、支持开发以及维护过程中对数据库相关表的数据结构更改进行记录,并写入到对应的数据库更改日志文件中;8、支持启用lombok的代码形式;9、支持启用swagger的项目;10、依赖少、简便轻量、灵活性高。 Diboot轻代码...

Global site tag (gtag.js) - Google Analytics