postgresql - 用于创建多个更新和 SELECT 语句的脚本
问题描述
我们有 2 个表renewable_bkp 和 adhoc_bkp 以及 1 个 MV 作为 test_mv1。我基本上想创建一个脚本来更新一行renewal_bkp和adhoc_bkp,然后从上面的MV中选择数据。这需要以循环方式完成。下面是一个
例子:
++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
update renewal_bkp set network_status='provisioned' where msisdn='3234561010240';
update adhoc_bkp set status='provisioned' where msisdn='3234561010240';
select * from test_mv1 where msisdn='3234561010240';
...
...
and so on
++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
同样的语句需要使用不同的 msisdn 编号生成 1000 次。你能帮我创建一个脚本来做到这一点,然后手动写下每个语句。
谢谢,桑迪普
解决方案
虽然完全不清楚您是如何访问s 的,但这里有一个紧凑的版本,它在Data-Modifying CTE 的msisdn
帮助下以原子方式一次性完成所有三件事:
WITH
ids (id) AS (
VALUES ('3234561010240'), ('...'), ...
),
renewals AS (
UPDATE renewal_bkp SET network_status = 'provisioned'
WHERE msisdn IN (SELECT id FROM ids)
),
adhoc AS (
UPDATE adhoc_bkp SET status = 'provisioned'
WHERE msisdn IN (SELECT id FROM ids)
)
SELECT *
FROM test_mv1
WHERE msisdn IN (SELECT id FROM ids)
除了该VALUES
子句,您还可以SELECT
从专用表中放置一个常规,如果您每年执行此操作的频率超过一次或两次,这将是有意义的。
推荐阅读
- preempt-rt - 如何在启动时设置 PREEMPT_RT 内核线程优先级
- node.js - 找不到 Heroku 模块
- python - 在 discord.py 上重新加载 cogs
- c# - 如果父对象具有负比例 Unity,则计算错误的旋转
- python - 检查内容是否仅以某些内容开头
- spring-integration - 从 Spring Integration 的 @Gateway 方法返回 ResponseEntity
- python-3.x - 以 sudo 运行 os.chmod 时出现权限错误
- r - 无法让 read.csv() 输出消失?
- database - 一个集合最多可以有多少个字段?
- c++ - 包含 STL::deque 的 C++ STL::map(不能从 'void' 转换为 class*)