PostgreSQL 数据库线上环境脏数据处理: 删除重复数据、表某一列设置默认值、给已有表数据某一列填充数据。

一、环境

PostgreSQL 9

二、准备数据

/*
Navicat PGSQL Data Transfer

Source Server         : localhost_postgresql
Source Server Version : 90617
Source Host           : localhost:5432
Source Database       : odc_test
Source Schema         : public

Target Server Type    : PGSQL
Target Server Version : 90617
File Encoding         : 65001

Date: 2021-07-22 18:41:11
*/


-- ----------------------------
-- Table structure for test_name
-- ----------------------------
DROP TABLE IF EXISTS "public"."test_name";
CREATE TABLE "public"."test_name" (
"id" int8 NOT NULL,
"name" varchar(32) COLLATE "default" NOT NULL,
"age" int4,
"sex" char(1) COLLATE "default",
"card" varchar(25) COLLATE "default",
"tel" varchar(11) COLLATE "default"
)
WITH (OIDS=FALSE)

;
COMMENT ON COLUMN "public"."test_name"."name" IS '姓名';
COMMENT ON COLUMN "public"."test_name"."age" IS '年龄';
COMMENT ON COLUMN "public"."test_name"."sex" IS '性别0男 1女';
COMMENT ON COLUMN "public"."test_name"."card" IS '身份证号';
COMMENT ON COLUMN "public"."test_name"."tel" IS '手机号';

-- ----------------------------
-- Records of test_name
-- ----------------------------
INSERT INTO "public"."test_name" VALUES ('1260784726849396737', 'tom', '12', '0', '123456', '13597257976');
INSERT INTO "public"."test_name" VALUES ('1263069543609675778', 'tom', '12', '0', '123456', '13597257976');
INSERT INTO "public"."test_name" VALUES ('1263073522485833730', 'lucy', '20', '1', '123457', '13597257977');
INSERT INTO "public"."test_name" VALUES ('1265564161713741826', 'lucy', '20', '1', '123457', '13597257977');
INSERT INTO "public"."test_name" VALUES ('1265910154359529473', 'lucy', '20', '1', '123457', '13597257977');
INSERT INTO "public"."test_name" VALUES ('1265919135994896386', 'role', '21', '1', '123458', '13597257978');
INSERT INTO "public"."test_name" VALUES ('1267419682026344450', 'role', '21', '1', '123458', '13597257978');

-- ----------------------------
-- Alter Sequences Owned By 
-- ----------------------------

-- ----------------------------
-- Primary Key structure for table test_name
-- ----------------------------
ALTER TABLE "public"."test_name" ADD PRIMARY KEY ("id");

四、重复数据

五、处理重复数据 

1、删除重复的数据,只保留一条数据

DELETE FROM test_name t1 WHERE t1.id not in (
SELECT DISTINCT min(t.id) FROM test_name t GROUP BY t.card,t.tel
)

2、执行结果

六、已存在表字段,某一列添加默认值 

ALTER TABLE test_name ALTER COLUMN tel SET DEFAULT '-1';

七、已存在表数据,某一列填充数据

1、原数据

2、执行sql

UPDATE test_name SET tel = '-1' WHERE id in(
SELECT id FROM test_name WHERE tel IS NULL
)

或者

UPDATE test_name SET tel = '-1' WHERE tel IS NULL

 3、执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi,all

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值