如何查明序列是否在此会话中初始化?

2024-07-04

我需要读取函数中序列的当前值。但是,在每个会话中我第一次尝试使用 currval() 时,出现以下错误:

currval of sequence "foo_seq" is not yet defined in this session

提示那些可能通过谷歌搜索此错误找到此问题的人:您需要初始化每个会话的序列,可以通过nextval() 或 setval() http://www.postgresql.org/docs/8.1/static/functions-sequence.html.

我可以用类似的东西lastval()甚至setval('your_table_id_seq', (SELECT MAX(id) FROM your_table)); https://stackoverflow.com/a/244265/1801588相反,但这似乎要么容易出现间隙,要么比简单的慢currval()。我的目标是避免间隙和不一致(我知道一些值将手动添加),因此在逻辑处理它们之前使用 nextval() 对于我的目的来说并不理想。无论如何,我需要它来初始化会话的序列,但我更喜欢这样做:

--start of the function here
IF is_not_initialized THEN
  SELECT setval('foo_seq', (SELECT MAX(id) FROM bar_table)) INTO _current;
ELSE
  SELECT currval('foo_seq') INTO _current;
END IF; 
--some magic with the _current variable and nextvalue() on the right position

关键是我不知道“is_not_initialized”是什么样子以及是否可能。有什么功能或其他技巧可以做到这一点吗?

编辑:实际上,我的计划是让每组客户在正确的序列、根本没有序列和我现在要求的奇怪的“类似序列的东西”之间进行选择。即使客户想要这样一个奇怪的序列,它也只会用于需要它的列 - 通常是因为有一些模拟数据,我们需要将它们的密钥(通常几乎无间隙序列)存储到数据库中以实现向后兼容性。

不管怎样,你是对的,这不是正确的解决方案,而且在这些情况下,没有任何顺序可能比这种混乱的解决方法更好,所以我会再次思考(并与客户讨论)是否真的需要它。


Craig、a_horse 和 pozs 提供的信息可以帮助您理解使用序列的原理。除了如何使用它的问题之外,这里还有一个函数,如果序列已初始化,则返回序列的当前值,否则返回 null。

如果一个序列seq还没有初始化,currval(seq)引发异常sqlstate 55000.

create or replace function current_seq_value(seq regclass)
returns integer language plpgsql 
as $$
begin
    begin
        return (select currval(seq));
    exception
        when sqlstate '55000' then return null;
    end;
end $$;

select current_seq_value('my_table_id_seq')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查明序列是否在此会话中初始化? 的相关文章

  • SQL 中WITH 子句的使用指南

    我了解如何使用WITH递归查询子句 但我在理解它的一般用途 功能时遇到问题 例如 以下查询更新一条记录 其 id 是通过使用按时间戳返回第一条记录 id 的子查询来确定的 update global prospect psp set sta
  • 导出数据库的 CREATE 脚本

    假设我已经在 pgAdmin 中创建了一个数据库 但我想导出一个 CREATE sql 文件 我将如何生成转储 以下是如何使用 pgAdmin 创建一个架构脚本 该脚本可以与 PostgreSql 数据库架构比较工具 例如apgdiff h
  • 是否可以暂时禁用 Postgres 中的索引?

    我在一张表上有一个索引 我想暂时禁用它 但我找不到任何表明这是可能的文档 原因 我有一个索引 它可能会导致与它旨在加速的任何查询无关的查询问题 这是一个新的索引 自从引入以来 整个系统似乎速度较慢 我只是希望能够可靠地消除它作为罪魁祸首 这
  • 多个 PHP 会话

    我要为一个网站构建一个 PHP 应用程序 该网站已经有另一个 PHP 应用程序在同一域 服务器上运行 我的应用程序当然会使用会话 并且我不希望我的会话干扰现有应用程序 例如 如果我想使用 SESSION username 也许其他应用程序也
  • 使用串联和 LIKE 的查询性能

    有人可以解释这 3 个查询之间的性能差异吗 concat 功能 explain analyze select from person where concat last name first name middle name like Se
  • 错误:索引表达式中的函数必须在 Postgres 中标记为 IMMUTABLE

    我想创建多列表达式索引 但是当我创建索引时 输出以下消息 detail message wapgrowth gt create index CONCURRENTLY idx test on tmp table using btree sky
  • 在 PostgreSQL 9.6 for windows 32 位上设置托管

    很多天以来 我一直在尝试在我的 postgreSQL 上设置托管 我尝试了很多解决方案 但没有一个有效 我的postgres的版本是9 6 适用于 Windows 32 位与 pgAdmin 4 我已经在我的pg hba conf有多种类型
  • PostGIS 插入 WKT 后会自动转换吗?

    我对 PostGIS 还很陌生 所以请耐心等待 假设我有一个表定义如下 CREATE TABLE gtest name varchar geom geometry 首先 插入 我正在做类似的事情 INSERT INTO gtest VALU
  • 将数组插入postgresql

    我想将 id 数组插入到文件中 但在创建我使用的表时int 并且它具有另一个表的引用 现在如何将数组值存储到特定字段 我知道列必须是相同的类型 而且我还看到有些人已经尝试解决数组问题上的外键 我也根据这个文档尝试过 ELEMENT 但没有成
  • 使用带有子选择的更新进行 PostgreSQL 记录重新排序

    我在 SQL Server 论坛上找到了有关如何对表中的记录重新排序的解决方案 UPDATE SomeTable SET rankcol SubQuery Sort Order FROM SELECT IDCol Row Number OV
  • 编码“UTF-8”的字符 0xc286 在“WIN1252”中没有等效项....使用 iconv postgres 进行转换时恢复崩溃

    我正在开发一个使用delphi和postgres 9 0的软件 原始开发人员选择数据库编码为 SQL ASCII 所以我们将编码更改为UTF 8对于我们的数据库 我们开始收到此错误后 Onclick of the One of the ch
  • 编码“UTF-8”的字符 0xc286 在“WIN1252”中没有等效项....使用 iconv postgres 进行转换时恢复崩溃

    我正在开发一个使用delphi和postgres 9 0的软件 原始开发人员选择数据库编码为 SQL ASCII 所以我们将编码更改为UTF 8对于我们的数据库 我们开始收到此错误后 Onclick of the One of the ch
  • 如何使用 Amazon Web Services (AWS) 同步会话?

    我们使用 Amazon Web Services AWS 并且拥有多个 Web 服务器和一个负载均衡器 Web 服务器的问题是 每个服务器的 SESSION 都是唯一的 我在 SESSION 中保留有关用户的一些信息 同步此信息的正确方法是
  • Spring如何管理Hibernate会话生命周期

    我们团队的Java EE项目中使用了Spring 底层ORM使用了hibernate transactionManager 设置如下
  • Postgres 查询包含某些内容的 JSON 数组

    Postgres 有这种 JSON 数据类型 我想知道如何查询 JSON 数组内的数据 我正在使用 Postgres 9 3 1 我已插入 PUBLISHER 表 该表具有这 2 个字段名称 字符串和数据 json INSERT INTO
  • 将 Java 数组转换为 Clojure 列表或序列?

    如何将 Java 数组转换为 Clojure 序列数据结构 例如列表或其他序列 This question https stackoverflow com q 16647261 712526展示如何进行相反的操作 Clojure 文档展示了
  • 将 Java 数组转换为 Clojure 列表或序列?

    如何将 Java 数组转换为 Clojure 序列数据结构 例如列表或其他序列 This question https stackoverflow com q 16647261 712526展示如何进行相反的操作 Clojure 文档展示了
  • Postgres 中的动态 UNION ALL 查询

    我们使用 Postgres PostGis 连接来获取通过地理服务器发布的数据 查询现在看起来像这样 SELECT row number over ORDER BY a ogc fid AS qid a wkb geometry AS ge
  • Django 会话竞争条件?

    摘要 Django 会话中是否存在竞争条件 如何防止它 我在 Django 会话方面遇到了一个有趣的问题 我认为该问题涉及由于同一用户同时发出请求而导致的竞争条件 它发生在一个同时上传多个文件的脚本中 正在本地主机上进行测试 我认为这使得同
  • 如何获取 PostgreSQL 中字符串中正则表达式匹配的位置?

    我有一个包含书名的表 我想选择标题与正则表达式匹配的书籍 并按标题中正则表达式匹配的位置对结果进行排序 单字搜索很容易 例如 TABLE book id title 1 The Sun 2 The Dead Sun 3 Sun Kissed

随机推荐

  • Laravel 自定义验证消息参数

    我正在使用 Laravel 5 1 我有一个 Summernotejs 表单元素 我已经成功创建了一个自定义验证规则 该规则获取从表单输入提供的 HTML 剥离标签 然后执行strlen 调用文本内容 因此我可以看到消息的长度 其中没有任何
  • 在 Excel VBA 中检查两个范围是否相等的最快方法[重复]

    这个问题在这里已经有答案了 假设您有两组数据 并且行数和列数相同 现在您想要检查一组单元格中的数据是否等于另一组中具有相同相对地址的单元格中的数据 如果一行的所有单元格都是如此 则从两组中删除该行 我可以通过比较每个单元格来非常轻松地进行编
  • 将特征矩阵映射到 C 数组

    我最近开始使用Eigen http eigen tuxfamily org 图书馆 我有一个将特征矩阵映射到 C C 数组的问题 默认情况下 特征矩阵以列为主 因此 如果我使用以下代码将矩阵映射到 C C 数组 double a 10 do
  • 如何配置CKEditor-4内联编辑器?

    我有一个标准安装 如示例 HTML 内容有很多 div 块 我需要通过本地或外部配置每个编辑器configTypeX js file div
  • 将一维数组复制到多维数组 - VBA

    我在 VBA 中有两个函数 Function1 返回一个一维数组 然后我有 function2 它是一个多维数组 我想将 Function1 中的数组复制到从索引 1 开始的多维数组的列 arr2 0 0 Something arr2 0
  • 使用 Spring Data JPA 和 JPA EntityListener 进行字段级加密

    我试图在插入 更新之前加密域实体上的一些字段 并在选择在 UI 中显示时解密它们 我将 Spring Data JPA 存储库与 Hibernate 和 EntityListener 结合使用 该 EntityListener 在 Post
  • java中的pagerank实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我计划为我的内部项目实现页面排名 并且使用这篇文章我得到了一些东西维基百科 http en wikip
  • 为所有支持 copy(id=newId) 方法的案例类创建共同特征

    我正在尝试做类似的事情 trait IdentifiableModel T self def copy id ObjectId T gt val id ObjectId 我发现了一些其他相关的问题试图做类似的事情 但他们并没有真正回答这个问
  • Mongoose 查询:查找数组中的元素

    Mongoose Mongo noob在这里 My Data 这是我的简化数据 每个用户都有自己的文档 v 1 id ObjectId 53440e94c02b3cae81eb0065 email email protected cdn c
  • 停止 jQuery 单击事件内底层 ng-click 的传播

    Twitter 引导程序dropdown嵌套在一个tr The tr可点击通过ng click 单击页面上的任意位置将折叠下拉菜单 该行为是通过指令定义的 document bind click closeMenu 因此 当打开菜单并且用户
  • 在父组件上调用 setstate 会强制对其子组件进行 componentDidUpdate?

    我有两个组件 父组件 App 和子组件 SearchBar 我希望 SearchBar 保持其自己的状态 并在更新其状态后调用其父组件作为 prop 提供的函数来更新其父状态 所以在我的 SearchBar 组件上我有 onSearchCh
  • ISerialized 接口有什么意义?

    似乎我可以序列化没有该接口的类 所以我不清楚它的目的 ISerializable用于提供自定义二进制序列化 通常用于BinaryFormatter 也许是为了远程处理的目的 如果没有它 它会使用字段 这些字段可以是 效率低下 如果有一些字段
  • 无法打印俄语字符

    我有一个俄语字符串 已编码为 UTF 8 String str u041E u041A System out println String str str 当我在 Eclipse 控制台中打印字符串时 我得到 谁能建议如何将俄语字符串打印到
  • 在 Parse iOS 中链接用户 ID 和安装 ID

    在 Parse 仪表板的数据浏览器窗格中 我看到安装和用户类 但是 对于特定设备上的特定用户 objectId 不匹配 现在 用户订阅的频道仅在安装类中可见 有没有什么方法可以将用户 ID 来自用户类别 链接到安装 ID 以便可以知道用户订
  • CXF 2.7.7 org.apache.cxf.interceptor.Fault:意外元素

    升级到 CXF 2 7 7 后 我遇到了无法理解的错误 当进行 Web 服务调用时 CXF 报告此异常 org apache cxf interceptor Fault Unexpected element http schema myor
  • 构建 VS 2013 安装项目时输出中出现重复消息

    我有一个 VS2013 安装项目 它构建了安装两个 C 项目生成的 exe 的安装程序 当我构建安装项目时 我收到重复的消息 就好像有两个构建过程一样 我从安装项目的输出中删除了两个 exe 之一 但我仍然收到重复的消息 Starting
  • 如何在不更改默认颜色和背景颜色的情况下使用CSS3 ::selection?

    默认情况下 HTML5 Boilerplate 模板中包含以下行 moz selection background fe57a1 color fff text shadow none selection background fe57a1
  • Android - Google Play 过滤掉 xxhdpi

    目前 我在使用 Google Play 过滤和 API 级别 16 中引入的新密度类 xxhpdi 时遇到问题 我的应用程序被分成 3 个 APK 文件 我知道这不是最佳实践 但由于计划不周 我现在必须这样做 有趣的部分是 Android
  • ASP.NET Core 3.0 控制器路由不起作用

    免责声明 我是 ASP NET Core Razor MVC 的新手 并且正在开始使用 3 0 预览版 我想要做的是在我的页面上有一个 按钮 将一个新的空项目添加到列表中 以便用户可以输入一些值 从我读过的内容 相当多 来看 听起来有一个指
  • 如何查明序列是否在此会话中初始化?

    我需要读取函数中序列的当前值 但是 在每个会话中我第一次尝试使用 currval 时 出现以下错误 currval of sequence foo seq is not yet defined in this session 提示那些可能通