PGSQL主键序列

这篇具有很好参考价值的文章主要介绍了PGSQL主键序列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PostgreSQL和 MySQL数据库还是有一定的区别。

下面了解一下 PGSQL的主键序列。

一、主键

1、系统自带主键序列

在 PostgreSQL 中,GENERATED BY DEFAULT GENERATED ALWAYS 是用于定义自动生成的列(Generated Column)的选项。一般可作用在主键上。

  • GENERATED ALWAYS: 表示该列是自动生成的,并且始终使用自动生成的自增值。如果你提供了一个值(不管这个值是否存在与表中),插入都会报错。
  • GENERATED BY DEFAULT: 表示该列是自动生成的,可以使用你提供的值,如果你没有提供值,则会生成一个默认值。需要注意:使用它创建表做主键时,手动插入显示指定了ID值(不管是否从1开始),后面继续接着 不显示指定id值,系统总是从 1开始。会出现前面创建的id值已存在的重复。

实操总结:

  • 一般情况,我们指定主键ID为 GENERATED ALWAYS类型。
  • 不管你使用 GENERATED ALWAYS还是 GENERATED BY DEFAULT类型,或者两者类型来回切换,只要你显示插入ID值时,PostgreSQL的自动生成ID都不会更新(除非你手动修改序列值)。所以,插入SQL不要显示指定ID值。

2、序列值

2.1 查看序列的当前值

在 PostgreSQL 中,如果你使用 GENERATED BY DEFAULT 或 GENERATED ALWAYS 选项来定义一个自动生成的 ID 字段,而且没有显式地指定序列的名称,PostgreSQL 将会自动为该列生成一个名为 <table_name>_<column_name>_seq 的默认序列名称,其中:

  • <table_name> 是表的名称,
  • <column_name> 是自动生成 ID 的列名。

使用下面 SQL 查询语句来查看序列的当前值:

SELECT last_value FROM your_table_name_your_column_name_seq;

-- 比如:查看用户表id序列值
SELECT last_value FROM user_id_seq;

也可以通过 Navicat的工具栏中的其他查看所有序列:

PGSQL主键序列,# PostgreSQL,PGSQL主键序列

2.2 修改序列值

要修改当前序列的值,可以使用 PostgreSQL 中的 SETVAL 函数

SELECT setval('your_sequence_name', new_value);

-- 比如:user_id_seq序列值改为15,下次插入时,id=16
SELECT setval('user_id_seq', 15);

– 求知若饥,虚心若愚。文章来源地址https://www.toymoban.com/news/detail-809554.html

到了这里,关于PGSQL主键序列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • psql: error: connection to server on socket “/var/run/postgresql/.s.PGSQL.5432“ failed: No such file

    当我在linux debian版本安装postgres数据库遇到的问题: 帮我解决成功的方法如下:可以直接复制运行,需要看注释 步骤一: 步骤二: 注意这里的16是我postgres的版本,你要改成你对应的版本数字比如14就改成14,然后出现语言区域我一般默认直接回车 步骤三: 然后就成功了 引

    2024年02月02日
    浏览(46)
  • psql: 错误: 连接到套接字“/var/run/postgresql/.s.PGSQL.5432“上的服务器失败:没有那个文件或目录服务器是否在本地运行并接受该套接字上的连接?

    查看 Postgresql 日志文件: 编码引起的报错,选择相应的编码支持。 这里我的是 en_US.UTF-8 查看一下本机所支持的所有编码 可见目前并不支持 en_US.UTF-8 ,所以先试着添加该支持,用命令: 通过空格选中 en_US.UTF-8 该编码格式,并确定。确定之后,系统环境默认的区域设置中会有

    2024年02月13日
    浏览(43)
  • 批量更新Postgresql的序列

    序列(sequence)是 PostgreSQL 中的一种对象,用于生成自动递增的唯一标识符。通常,序列会与表的自增主键一起使用,以确保每个新插入的行都有一个唯一的标识符。在某些情况下,可能需要更新序列的值: 从另一个数据库中导入数据,自增列的值也从原来的数据中导入。导

    2023年04月24日
    浏览(32)
  • postgresql序列重复问题处理

    在执行数据插入时,postgresql 提示 more than one owned sequence found 错误。这个和之前文章中写的序列编号错乱不同,是由数据表的一个列生成了多个序列导致的。(常见于两个数据库的拷贝、同步等操作)。 如果查看序列,会发现序列中有很多重复的项目,可以执行语句: 生成

    2024年02月13日
    浏览(37)
  • [pgrx开发postgresql数据库扩展]6.返回序列的函数编写(1)单值序列

    上篇文章是中规中矩的标准计算函数,就算不用pgrx,也是可以正常理解的,所以基本上没有什么对于pgrx框架有关系的东西(唯一有关系的东西,应该就是Rust的时间类型与pgrx的时间类型的计算了)。 这篇文章会讲一个pgrx对于postgresql或者说对于任何数据库扩展来说都比较有用

    2024年02月03日
    浏览(42)
  • 【PostgreSQL】导出数据库表(或序列)的结构和数据

    要导出 PostgreSQL 数据库的结构和数据,你可以使用 pg_dump 命令行工具。 pg_dump 可以生成一个 SQL 脚本文件,其中包含了数据库的结构(表、索引、视图等)以及数据。下面是如何使用 pg_dump 导出数据库结构和数据的示例: 导出数据库结构和数据: 使用以下命令来导出整个数据

    2024年02月11日
    浏览(38)
  • mysql与pgsql的区别

    Pgsql中文文档 http://www.postgres.cn/docs/13/index.html 一、 PostgreSQL 的稳定性极强 。 Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。 二、任

    2023年04月08日
    浏览(37)
  • PgSQL-并行查询系列-介绍[译]

    PgSQL-并行查询系列-介绍 现代CPU模型拥有大量的CPU核心。多年来,数据库应用程序都是并发向数据库发送查询的。查询处理多个表的行时,若可以使用多核,则可以客观地提升性能。PgSQL 9.6引入了并行查询的新特性,开启并行查询后可以大幅提升性能。 1)若所有CPU核心已经饱

    2024年02月09日
    浏览(42)
  • pgsql数据库自动备份

    本文的写作原因:对实际客户需求的一次小总结,顺带做一次笔记 任何数据库都需要备份,备份数据是维护数据库必不可少的操作。 数据库备份常见的应用场景: 硬件故障造成数据库部分数据或全部数据丢失 人为操作失误造成某些数据被误操作 软件 BUG 造成部分数据或全部

    2024年02月08日
    浏览(48)
  • PGSQL安装PostGIS扩展模块

    PostGIS是一个空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。 空间数据与数据库关联起来的三个要素:数据类型、索引和函数。 空间数据类型:用于指定图形为点(point)、线(line)和面(polygon) 多维度空间索引:被用于进行空间

    2024年01月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包