在PostgreSQL中设置表中某列值自增或循环方式

 更新时间:2021年01月19日 10:31:35   作者:路人甲JIA  
这篇文章主要介绍了在PostgreSQL中设置表中某列值自增或循环方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在postgresql中,设置已存在的某列(num)值自增,可以用以下方法:

//将表tb按name排序,利用row_number() over()查询序号并将该列命名为rownum,创建新表tb1并将结果保存到该表中
create table tb1 as (select *, row_number() over(order by name) as rownum from tb); 
//根据两张表共同的字段name,将tb1中rownum对应值更新到tb中num中
update tb set num=(select tb1.rownum from tb1 where tb.name = tb1.name);
//判断表tb1的存在并删除表
drop table if exists tb1;

在postgresql中,循环设置已存在的某列(num)值为0-9,可以用以下方法:

//将表tb按name排序,利用row_number() over()查询序号并将该列命名为rownum,创建新表tb1并将结果保存到该表中
create table tb1 as (select *, row_number() over(order by name) as rownum from tb); 
//根据两张表共同的字段name,将tb1中rownum对应值更新到tb中num中,由于为0-9循环自增,则%10
update tb set num=(select tb1.rownum from tb1 where tb.name = tb1.name) % 10;
//判断表tb1的存在并删除表
drop table if exists tb1;

其它:附录一个postgresql循环的写法(与上文无关)

 do $$
 declare
 v_idx integer :=0;
 begin
  while v_idx < 10 loop
   update tb set num = v_idx;
   v_idx = v_idx + 1;
  end loop;
end $$;

补充:postgreSQL SQL语句创建自增表

方法一:postgreSQL通过将字段类型设置为serial来将表设计为自增表

CREATE TABLE t_achievement_directory (
 id serial8 PRIMARY KEY,
 directory_name varchar(255) COLLATE "pg_catalog"."default",
 pid int8,
 modify_time timestamp(6)
)
;

方法二:GENERATED BY ALWAYS AS IDENTITY 或 GENERATED BY DEFAULT AS IDENTITY

id int8 NOT NULL GENERATED BY DEFAULT AS IDENTITY

id int8 NOT NULL GENERATED ALWAYS AS IDENTITY

这两种方式的区别在于:

generated always as identity 总是按照(START WITH 1 INCREMENT BY 1)的方式插入数据,并维护索引。即不允许用户向id列指定数据插入。

但是 generated by default as identity 则是在用户不指定id列值的情况下按照(START WITH 10 INCREMENT BY 10)方式插入数据,如果用户指定,则依然按照指定的值插入。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • PostgreSQL教程(十一):服务器配置

    PostgreSQL教程(十一):服务器配置

    这篇文章主要介绍了PostgreSQL教程(十一):服务器配置,本文讲解了服务器进程的启动和关闭、服务器配置、内存相关的参数配置等内容,需要的朋友可以参考下
    2015-05-05
  • Linux下创建Postgresql数据库的方法步骤

    Linux下创建Postgresql数据库的方法步骤

    PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。下面这篇文章主要给大家介绍了关于在Linux下创建Postgresql数据库的方法步骤,需要的朋友可以参考,下面来一起看看吧。
    2017-07-07
  • postgresql如何兼容MySQL if函数

    postgresql如何兼容MySQL if函数

    这篇文章主要介绍了postgresql如何兼容MySQL if函数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 查询PostgreSQL中所有表逻辑外键的方法

    查询PostgreSQL中所有表逻辑外键的方法

    本文介绍了如何查询PostgreSQL中所有表的逻辑外键,并指导您如何先删除再重新建立这些外键,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友一起看看吧
    2023-08-08
  • PostgreSQL 实现登录及修改密码操作

    PostgreSQL 实现登录及修改密码操作

    这篇文章主要介绍了PostgreSQL 实现登录及修改密码操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • pgsql 变量赋值方法及注意事项

    pgsql 变量赋值方法及注意事项

    这篇文章主要介绍了pgsql 变量赋值方法及注意事项,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 关于PostgreSQL 行排序的实例解析

    关于PostgreSQL 行排序的实例解析

    这篇文章主要介绍了关于PostgreSQL 行排序的实例解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql数据库根据年月查询出本月的所有数据操作

    postgresql数据库根据年月查询出本月的所有数据操作

    这篇文章主要介绍了postgresql数据库根据年月查询出本月的所有数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL完成按月累加的操作

    PostgreSQL完成按月累加的操作

    这篇文章主要介绍了PostgreSQL完成按月累加的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL基于Citus实现分布式集群的全过程

    PostgreSQL基于Citus实现分布式集群的全过程

    Citus是一个PostgreSQL扩展,它将Postgres转换为分布式数据库,因此您可以在任何规模上实现高性能,因客户的需求,本文详细阐述了PostgreSQL基于Citus实现的分布式集群的全过程,需要的朋友可以参考下
    2023-11-11

最新评论