繁体   English   中英

我有一个带有状态的表,但是我希望它每 10 分钟更改一次状态。 我正在使用 Postgresql

I have a table with a status however I want it to change status every 10 minutes. I'm using Postgresql

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想将表的值从一种状态更改为另一种类型'A' ,10 分钟后我希望它使用 python 变为'B' postgres。

1 个回复

我可以看到您在追求什么,尽管有一个很大的遗漏:当状态达到“Z”并且是时候更新时会发生什么? 稍后再谈。

您的请求有 2 个组件,实际上是运行一个进程和一个滚动更新程序(脚本)的状态。 好吧,Postgres 没有用于启动脚本的本机功能。 您必须设置一个 cron 作业,或者条目就是您拥有的任何作业调度程序。 更新过程并不是那么困难,除了未定义的“Z”状态问题。 (因此,当发生这种情况时,我将重复扩展代码长度的 AZ(有点像 excel 名称列)。

所需的基本更新是简单地将当前值加 1。 但是当然语句“'A'+1”不起作用,但是可以通过CHR和ASCII函数获得结果。 Chr(ascii('A')+1)) 有效地实现了这一点,因此您的更新可以通过以下方式完成:

Update table_name set status = chr(ascii(status)+1);

但是,一旦状态达到“Z”,就会失败。 好吧,它不会因为产生错误而失败,但它会产生“[”。 以下脚本在上述情况下生成 'AA',每次状态达到 '...Z' 时,下一个状态变为 '...AA'。

--- setup 
drop table if exists current_stat;
create table current_stat(id serial,status text,constraint status_alpha_ck check( status ~ '^[A-Z]+'));
insert into current_stat(status) values (null), ('A'), ('B'), ('Y'), ('Z'), ('AA'), ('ABZ')

--- Update SQL
with curr_stat as
   ( select id, status
          , chr(ascii(substring(status,char_length(status),1))+1) nstat
          , char_length(status) lstat from current_stat)  
update current_stat cs
  set status = ( select case when status is null or lstat < 1     then 'A'
                             when substring(status,lstat,1) = 'Z' then overlay( status placing 'AA' from lstat for 2)
                             else overlay( status placing nstat from lstat for 1)
                        end
                   from curr_stat
               where cs.id = curr_stat.id
             );

select * from current_stat;
4 我无法更改复选框的状态

当我单击 menuItem实时预览(复选框)上的上下文菜单时:始终未选中 单击菜单项时如何切换复选框 解决方案: ...

7 我想动态更改不和谐机器人状态

这是我使用的代码 就像状态改变的每一分钟一样,我尝试过但它不允许我使用其他命令,我放置了这段代码但它会给出一个错误,说我不能在on_ready() 中放置消息参数 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM