PostgreSQL SQL写出变态味,可以!(附带两个哑谜)

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2650人左右 1 + 2 + 3 + 4 +5 + 6 + 7 + 8 )(1 2 3 4 5 6群均已爆满,新人进7群380+,8群,准备9群)

今天不说没礼貌的故事了,今天换一个话题,等“没礼貌”的在来找,在继续写。 今天说SQL的问题,这个话题会一分为二

PostgreSQL 什么都能存,什么都能塞 --- 你能成熟一点吗?

PostgreSQL 迁移用户很简单 ---  我看你的好戏

PostgreSQL  用户胡作非为只能受着 --- 警告他

PostgreSQL  加索引系统OOM 怨我了--- 不怨你怨谁

PostgreSQL  “我怎么就连个数据库都不会建?”   --- 你还真不会!

1  丧心病狂的SQL 的分析

2  为什么会产生这个错误


开始说SQL,说一个丧心病狂的SQL,(认为本文是说SQL撰写的问题,那就大错特错了,咱们是另一个角度)先看这个SQL。

SELECT
   stage.id,
   stage.pipeline_id,
   stage.environment_id,
   stage.name,
   (
    SELECT EXISTS (
     SELECT 1 FROM task
     LEFT JOIN LATERAL (
      SELECT COALESCE(
       (SELECT
        task_run.status
       FROM task_run
       WHERE task_run.task_id = task.id
       ORDER BY task_run.id DESC
       LIMIT 1
       ), 'NOT_STARTED'
      ) AS status
     ) AS latest_task_run ON TRUE
     WHERE task.pipeline_id = stage.pipeline_id
     AND task.stage_id <= stage.id
     AND NOT (
      COALESCE((task.payload->>'skipped')::BOOLEAN, FALSE) IS TRUE
      OR latest_task_run.status = 'DONE'
     )
    )
   ) AS active
  FROM stage
  WHERE %s ORDER BY id ASC

在看完这个SQL后,我不知道各位看官怎么想,我的想法是,够狠,够虐,够聪明。从多年的SQL观察和优化的角度,这个SQL的撰写者并不一般,这是一个知名的软件中我们运行出现问题的SQL,执行中报错,报can not add sublink to placeholder_list。

b399bf805a12c374e43274e8c8dabf80.jpeg

为什么说这个SQL是丧心病狂的 

1  这个SQL撰写成这样是有原因的,明显是为了软件不被破译而做的手段。

 2  撰写者非常的狡猾,利用了一个SQL完成了一个简单的业务逻辑的判断程序。

结论:现在SQL都能这么玩了,SQL现在有防盗,防贼,防闺蜜的能力了。

那么我们现在来破译一下,这个SQL的原理和他到底要干什么。

SELECT 1 FROM task
     LEFT JOIN LATERAL (
      SELECT COALESCE(
       (SELECT
        task_run.status
       FROM task_run
       WHERE task_run.task_id = task.id
       ORDER BY task_run.id DESC
       LIMIT 1
       ), 'NOT_STARTED'
      ) AS status
     ) AS latest_task_run ON TRUE
     WHERE task.pipeline_id = 106
     AND task.stage_id <= 106
     AND NOT (
      COALESCE((task.payload->>'skipped')::BOOLEAN, FALSE) IS TRUE
      OR latest_task_run.status = 'DONE'
     )

这段语句可能一般的人,一时半刻解不开这里面到底是什么意思,这里我先做一个解释。这段代码虽然是SQL,但不要把他当SQL看,一段程序,一段具有多个判断能力的程序。

我们逐级的将这段SQL拆开。

核心部分 1

先说这段,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值