Postgresql 和 PHP:currval 是在多用户应用程序中检索最后一行插入的 id 的有效方法吗?

2024-04-24

我想知道我用来检索插入到 postgresql 表中的最后一行的 id 的方法是否有效。

显然,它可以工作,但是当我有许多用户同时在同一个表中添加行时,引用串行序列 currval 值可能会出现问题。

我的实际做法是:

$pgConnection = pg_connect('host=127.0.0.1 dbname=test user=myuser password=xxxxx')or die('cant connect');

$insert = pg_query("INSERT INTO customer (name) VALUES ('blabla')");
$last_id_query = pg_query("SELECT currval('customer_id_seq')");
$last_id_results = pg_fetch_assoc($last_id_query);
print_r($last_id_results);
pg_close($pgConnection);

嗯,这只是一个测试自动取款机。 但无论如何,我可以通过这种方式看到 3 个问题:

  1. 引用 customer_id_seq,如果两个用户同时做同样的事情,可能会发生他们都从这种方式获得相同的 id...或者不是?
  2. I 必须知道表的序列名称。因为 pg_get_serial_sequence 不适合我(我是 postgresql 的新手,可能是配置问题)

有什么建议/更好的方法吗?

p.s:我无法使用 PDO,因为事务保存点似乎有点缺乏;我不会使用 zend,最后,我更喜欢使用 php pg_* 函数(也许我最终会构建我的类)

EDIT:

@SpliFF(他们删除了他的答案):这样会更好吗?

$pgConnection = pg_connect('host=127.0.0.1 dbname=test user=myuser password=xxxxx')or die('cant connect');

pg_query("BEGIN");

$insert = pg_query("INSERT INTO customer (name) VALUES ('blabla')");

$last_id_query = pg_query("SELECT currval('customer_id_seq')");

$last_id_results = pg_fetch_assoc($last_id_query);

print_r($last_id_results);

//do somethings with the new customer id

pg_query("COMMIT");

pg_close($pgConnection);

如果您使用较新版本的 PostgreSQL (> 8.1),则应使用 INSERT(和 UPDATE)命令的 RETURNING 子句。

OTOH 如果您坚持使用序列操作函数之一,请阅读精美手册 http://www.postgresql.org/docs/current/static/functions-sequence.html。一个指针:“请注意,因为这是返回一个会话本地值,所以它会给出一个可预测的答案,无论其他会话自当前会话以来是否执行过 nextval。”

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

Postgresql 和 PHP:currval 是在多用户应用程序中检索最后一行插入的 id 的有效方法吗? 的相关文章

  • jQuery 如何修复无法设置未定义的属性“_DT_CellIndex”?

    我是 Jquery 的新手 我希望一旦用户添加新行并在单击 Ajouter 按钮后提供重要信息 它将添加到数据库中 然后自动重新加载表 一旦我运行 我发现数据已成功添加到数据库 但是 tablebqup 不再重新加载 并且我发现了此错误 U
  • 无法将 Laravel 应用程序部署到 EC2

    我的 Laravel 项目全部在我的本地主机上运行 我将其部署到 EC2 但没有任何反应 我在开发控制台中看到的只是内部错误 500 我缺少什么 在部署到 AWS 之前我需要更改哪些内容 这是网址 http ec2 52 88 99 75
  • 构建一个“简单”的 php url 代理

    我需要在我正在构建的 Web 应用程序中实现一个简单的 PHP 代理 它基于 Flash 并且目标服务提供商不允许编辑其 crossdomain xml 文件 任何 php 专家都可以就以下 2 个选项提供建议吗 另外 我认为 但不确定 我
  • 如何让 PHP、符号链接和 __FILE__ 很好地协同工作?

    在本地主机上 我有以下目录结构 share www trunk wp content plugins otherfolders share www portfolio wp content symlink Where symlink是一个符
  • 如何在ubuntu中从源代码安装postgresql的AGE扩展? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 由于我想尝试一下 Apache Age of postgresql 所以在阅读文档时我迷失了方向 有什么简单的解决方案吗 这是有关如何
  • woocommerce 自定义结账字段添加费用以订购 ajax

    我试图在结账时在订单总额中添加自定义费用 我在 woocommerce 中添加了一个复选框 add action woocommerce after checkout billing form add box option to check
  • 如何从symfony2中的表单对象获取每个字段的错误消息?

    我按照这个教程http symfony com doc current forms html http symfony com doc current forms html我完美地呈现了我的插入表单 但只有一个问题我无法解决 当表单无效时
  • 强制下载不同的文件[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • PHP 构造函数返回 NULL

    我有这个代码 是否有可能User对象构造函数以某种方式失败 以便 this gt LoggedUser被分配了一个NULL构造函数返回后值和对象被释放吗 this gt LoggedUser NULL if SESSION verbiste
  • Postgres 在并发更新插入时出现死锁

    我们有一个从数据流中读取信息并将该信息更新到数据库中的应用程序 数据是 Google Drive 上发生的变化 这意味着影响相同对象的许多事件可能会非常接近地发生 将此信息更新插入数据库时 我们遇到了死锁 日志中显示的内容如下 我已经重建并
  • 无法在 Google Cloud Function 中加载 node_modules(index.js,不在项目根目录上)

    因此 我需要部署 Google Cloud Function 以在 PostgreSQL 数据库 Cloud SQL 上发出选择请求 我需要使用 pg 模块 然后使用以下命令安装它 npm i pg 你需要知道我的项目目录是这样的 proj
  • 在表单提交时发送 div 的值

    我正在尝试提交一个包含几个不同输入的表单 这些输入都工作正常 然而 输入之一是文本区域 某种程度 我必须将其更改为内容可编辑的 div 主要是因为我创建了自己的粗体 斜体和下划线按钮 这些按钮不适用于普通文本区域 问题是提交时的表单没有将文
  • 每行仅显示 3 个 foreach 结果

    我的脚本如下 output table class products tr while info mysql fetch array data Outputs the image and other data output td img s
  • PostgreSQL 对 string\varchar 的各种清理

    我必须通过以下方式清理一些 varchar 删除特殊字符 例如 来自封闭列表 我已经成功地通过大量使用replace regexp replace来做到这一点 但我正在寻找类似于SQL Server中的东西 删除以下数字但不删除相邻的数字含
  • 如何使用 PHP 跳过 XML 文件中的无效字符

    我正在尝试使用 PHP 解析 XML 文件 但收到错误消息 解析器错误 字符 0x0 超出允许范围 我认为这是因为 XML 的内容 我认为有一个特殊符号 我能做些什么来修复它 我还得到 解析器错误 标签项行中数据过早结束 可能是什么原因导致
  • 将 PHP 错误处理程序限制为特定命名空间

    PHP 有没有办法只为特定的命名空间设置错误处理程序 我正在构建一个小型框架 我希望能够通过设置自定义错误处理程序并抛出异常来尝试捕获其名称空间内的所有错误 警告 通知消息 在此特定名称空间之外触发的错误应该以常规方式表现 用PHP可以完成
  • 尝试解码 JSON 日期时显示“JSON 写入中的类型无效 (__NSTaggedDate)”

    当我尝试从具有日期变量的数据库中解码 JSON 对象时 出现错误 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序 原因 JSON 写入中的无效类型 NSTaggedDate 错误发生在以下代码行 le
  • 在 Docker Compose 中更改 postgres 容器服务器端口

    我正在尝试使用 Docker compose 在远程服务器上部署第二个数据库容器 该 postgresql 服务器在端口 5433 上运行 而不是第一个 postgresql 容器使用的端口 5432 当我设置应用程序时 我收到以下错误输出
  • 当查询没有返回记录时,如何通过 PDO/Sqlite 获取列名?

    下面的代码允许我将 SQL 语句传递给一个类并调用其方法来显示一个漂亮的结果表 包括列名 然而 如果没有结果 我仍然想要列名要显示 很遗憾 getColumnMeta没有像我发现的其他示例中那样返回任何数据 有谁知道如何让 getColum
  • Codeigniter:无法使用提供的设置连接到数据库服务器

    我使用 codeigniter 作为 cms 框架 如果数据库主机名是 localhost 它可以正常工作 db default hostname localhost db default username root db default

随机推荐

  • 在 swift 中使用 UUID() 和 json

    我在网上找到了在 json 文件中使用硬编码 uuid 的示例 并且这些示例非常适合我 但是当我在应用程序中添加从 json 数组中删除项目的功能时 我需要动态创建这些 uuid 这是我的json文件 list json 它曾经有硬编码的i
  • Objective-C 中的二叉树

    我正在学习算法和数据结构 并尝试使用 Objective C 设计和实现二叉树进行训练 到目前为止 我有以下课程 main 供测试用 Node 树的节点 BinaryTree 对于与树相关的所有方法 最早的方法之一BinaryTree我实现
  • 创建一个过程来检索表上的所有索引并重建

    我想创建一个过程来检索表上的所有索引并重建 我用这个查询检索所有索引 select index name from user indexes where table name your table name 我用这个查询重建 alter i
  • 以编程方式获取导航栏的高度

    我知道更多视图控制器 导航栏 的存在将 UIView 的高度推低 我也知道这个高度 44px 我还发现这种下推可以维持 self view frame origin y 0 那么 除了将其设置为常量之外 如何确定该导航栏的高度呢 或者 更短
  • Java 堆转储是否包括线程堆栈

    我一直在使用 Eclipse 内存分析工具来检查堆转储 我还没有看到任何对象通过线程堆栈中的局部变量保持活动状态的情况 java线程堆栈是否保留在堆转储中 如果不是 这些对象是否会被视为转储中无法访问的对象 如果是这样 是否有任何方法可以保
  • C# 位图/图形内存不足

    我正在尝试拍摄整个屏幕的快照以读取像素值 事实上我这样做没有任何问题 但在 214 个快照之后 我出现了内存不足的异常 Bitmap ScreenShot new Bitmap Screen PrimaryScreen Bounds Wid
  • 从 C# Windows 窗体在 MS Word 中打开 MS Word 文档

    我希望能够通过单击表单上的按钮 从 C 表单中打开 MS Word 中已制作的 Word 文档 但不知道如何操作 请帮忙 Thanks 上次我使用 Excel 时 我使用以下代码打开它 Process Start FileLocation
  • 使用ExternalContext.redirect()将面孔消息添加到重定向页面

    我在用ExternalContext redirect String 将用户重定向到另一个页面的方法 FacesContext getCurrentInstance addMessage new FacesMessage Bla bla b
  • java.lang.NoClassDefFoundError:无法解析:Landroid/webkit/PacProcessor

    实在找不到言语 我的项目只是一天天都无法编译 这就是我所做的 我下载并显示一个 PDF 然后将其作为保存的 PDF 打印到设备上 然后崩溃了 这是崩溃的情况 at java lang Class java lang Class classF
  • 将预处理器宏添加到 xcode 6 中的目标

    也许这非常简单 但我找不到在 Xcode 6 中为目标定义预处理器宏的方法 我已经做了一个屏幕截图来显示它在 Xcode 中的位置 因为它更容易 选择项目文件 选择您想要的目标 转到构建设置 搜索 预处理器 添加用于调试 发布或两者的预处理
  • Apache Spark:在分区上并行应用 sklearn 的函数

    我是大数据和 Apache Spark 的新手 也是一名在导师指导下工作的本科生 是否可以将函数 即样条曲线 仅应用于 RDD 的分区 我正在尝试实现论文中的一些工作here http sites stat psu edu rli rese
  • onBackPressed 功能在 IMMERSIVE STICKY 模式下不起作用

    我正在使用沉浸模式进行带有 videoView 的活动 我的目标是当触摸屏幕时 媒体控制器和系统控制栏一起显示或消失 现在一切正常 问题是我无法正常离开活动 当我按一次后退按钮时 系统栏再次隐藏 什么也没有发生 我必须按两次才能退出活动 我
  • Cython 类执行同类 cython 类列表

    我定义了一个泛型类Rule在 Cython 中 它期望cdef方法initialize 我创建了一个类 它本身定义为Rule 但它执行initialize规则列表的方法 cython cdef class Rule cdef initial
  • cells().paste VS cells.pastespecial?

    下面的代码是如何工作的 Range D4 F4 copy cells 1 1 PasteSpecial 虽然下面不起作用 Range D4 F4 copy cells 1 1 Paste 我意识到正确的语法是 Range D4 F4 cop
  • pctl(PR_SET_PDEATHSIG) 竞争条件

    据我了解 当父进程死亡时终止子进程的最佳方法是通过prctl PR SET PDEATHSIG 至少在 Linux 上 父进程退出后如何让子进程终止 https stackoverflow com questions 284325 how
  • JQMIGRATE:jQuery.fn.offset() 需要连接到文档的元素

    我有一个使用 jquery 1 x 的网站 现在 我开始在这个网站中使用 jquery 3 x 为了解决任何迁移问题 我已经安装了 JQMigrate 它在控制台窗口中显示的消息之一是 JQMIGRATE jQuery fn offset
  • ClearFix 与溢出[重复]

    这个问题在这里已经有答案了 这是标准浮动问题 父容器 div 中有一堆浮动元素 由于子级是浮动的 父级不会扩展以包含所有子级 我了解clearfix解决方案以及将父容器div上的溢出属性设置为 自动 或 隐藏 http www quirks
  • 是否有内置的 .NET 异常指示非法对象状态?

    如果遇到非法状态 例如 只能调用一次的初始化方法第二次被调用 我应该抛出什么异常 我真的没有看到任何有意义的内置异常 这看起来应该是框架中的东西 我是不是戳错了地方 无效操作异常 http msdn microsoft com en us
  • 使用启动屏幕 (.xib) 会停止缩放

    据我了解 iOS 8 的应用程序应该有一个故事板文件作为启动屏幕而不是图像 我创建了一个非常简单的启动屏幕文件 它具有任意宽度和任意高度 并且有一个纯文本标签 上面写着 占位符 并将其设置为我的启动屏幕 然而 当我尝试在 iPhone 6
  • Postgresql 和 PHP:currval 是在多用户应用程序中检索最后一行插入的 id 的有效方法吗?

    我想知道我用来检索插入到 postgresql 表中的最后一行的 id 的方法是否有效 显然 它可以工作 但是当我有许多用户同时在同一个表中添加行时 引用串行序列 currval 值可能会出现问题 我的实际做法是 pgConnection