Postgres:如果不存在则插入,否则返回行[重复]

2024-01-11

在一个 SQL 语句中,我尝试插入一行,如果由于约束而失败,则返回现有行。

I have:

INSERT INTO session (token, expiry) SELECT 'abcdefg', '2014-05-14 20:25:12.279667' WHERE  NOT EXISTS (SELECT * FROM session where token= 'abcdefg');

The token列具有唯一约束。我尝试过附加RETURNING *最后,但仍然不会返回现有行。

为什么是这样?我以为我的最后SELECT语句将被执行并返回。有任何想法吗?

注意:由于一些复杂的竞争条件,我无法使用 Postgres 函数或多个 SQL 语句。


WITH d(t, e) AS ( VALUES ('abcdefg', '2014-05-14 20:25:12.279667')),
  t AS (SELECT token FROM session, d WHERE token=t),
  i AS (INSERT INTO session (token, expiry) 
           SELECT t, e FROM d WHERE t NOT IN (SELECT token FROM t))
SELECT t,e FROM d WHERE t IN (SELECT token FROM t);

查询首先生成一个CTEd与您要插入的数据

然后它产生 CTEt会话中的令牌与中的令牌相匹配d(如果不匹配则为空)。

然后它使用CTEi插入行来自d如果没有匹配项t into session.

最后它返回来自的行d如果它确实有匹配项t.

顺便说一句,这也适用于多行。

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

Postgres:如果不存在则插入,否则返回行[重复] 的相关文章

  • 如何将可视选择的文本通过管道传输到 UNIX 命令并将输出附加到 Vim 中的当前缓冲区

    使用 Vim 我尝试将在可视模式下选择的文本通过管道传输到 UNIX 命令 并将输出附加到当前文件的末尾 例如 假设我们有一个 SQL 命令 例如 SELECT FROM mytable 我想做如下的事情
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 用户登录时的 Postgresql 触发器

    我正在尝试找出一种方法来了解用户何时登录 Postgres 数据库 有没有办法定义用户登录数据库时触发的触发器 或者是否有一个表或系统视图在任何人登录数据库时都会更新 登录钩子 https github com splendiddata l
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N
  • 在 PostgreSQL 中使用月份名称排序

    我有一个表 其中有一个字段 Month Name 它包含月份的名称 我想按月份名称排序 不是按字母顺序 而是按实际顺序 例如一月 二月等 如何使用 PostgreSQL 实现此操作 有什么方法可以将月份名称转换为其数值吗 id billed
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • PESSIMISTIC_WRITE 是否锁定整个表?

    只是为了确保我正确理解事情是如何运作的 If I do em lock employee LockModeType PESSIMISTIC WRITE 它会仅阻止该实体吗 employee 或整个表Employees 如果重要的话 我正在谈
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 月份增量查询

    我想通过添加 1 个月来更新数据库中的月份 但我不知道如何在以下存储过程查询中添加月份 我不擅长 sql 请检查它 ALTER PROCEDURE dbo ChangePassword password varchar 20 epasswo
  • 检查 postgres 复制状态

    有人可以建议检查 postgresql 复制状态的步骤以及如何确定复制是否未正确进行吗 我们在 pgsql9 0 和 pgsql9 4 中使用流复制 我通常使用以下 SQL 查询来检查 Postgres v11 的状态 关于主人 selec
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何使用sql作为xml路径('')但保留回车符

    我有下面的代码 select select cast Narrative as Varchar max char 13 from officeclientledger where ptmatter matter and ptTrans 4
  • 比较两个 postgres 转储文件

    如何比较 postgres 转储文件 我有两个转储文件 dump1 和 dump2 我想比较这两个转储文件 任何帮助将不胜感激 谢谢 如果使用 Windows 则可以使用 Beyond Compare 如果使用 linux fedora 则
  • 如何使用 LAMBDA 表达式在 LINQ 中执行 IN 或 CONTAINS?

    我有以下 Transact Sql 我正在尝试将其转换为 LINQ 并且很挣扎 SELECT FROM Project WHERE Project ProjectId IN SELECT ProjectId FROM ProjectMemb
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 在 Powershell 中运行 Start-Website 命令时出现“无法创建文件”错误

    目前我正在尝试运行这个 powershell 脚本 Param websiteName physicalPath import module WebAdministration website get website where objec
  • 在运行时清除日志文件:被另一个进程错误使用

    我在我的应用程序中使用 Serilog 框架 在我的应用程序中 当日志文件大小达到 2MB 时 我通过将现有文件从 file log 重命名为 file log bak 并创建新的 file log 来创建日志文件的备份 在运行时 我在读取
  • 如何检测 React Native 应用程序何时关闭(而不是暂停)?

    我到处都找过 但找不到这个问题的答案 我如何检测用户何时尝试关闭我的 React Native 应用程序 如进程正在运行 并且他们手动管理其应用程序并强制退出它 我想在发生这种情况时添加注销功能 但是找不到检测它的方法 AppState似乎
  • SQLCipher 与 DBFlow

    我曾经使用过 DBFlow 它在数据库方面非常简单 但我想问是否有一个很好的例子来将 SQLCipher 与 DBFlow 一起使用 我已点击此链接寻求帮助 Raizlabs DBFlow https github com Raizlabs
  • Python Pandas 按小时对日期时间进行分组并计算行数

    这是我的交易数据框 其中每一行表示一个交易 date station 30 10 2017 15 20 A 30 10 2017 15 45 A 31 10 2017 07 10 A 31 10 2017 07 25 B 31 10 201
  • 访问类中的变量

    我想访问一个类中的变量 而不是作为类的实例 例如 class myclas private list array 1 2 3 我需要以这种方式访问 list 的值 myclass list 不可能 还有其他方法吗 谢谢 编辑 谢谢大家的回答
  • 垃圾收集运行时成本的大O分析

    当推理垃圾收集语言中的运行时成本时 诸如以下语句的成本是多少 myList null 用 n 列表中的元素数量 表示 为了便于论证 请将该列表视为引用类型的单链表 无需终结 更一般地说 我正在寻找有关如何使用 GC 语言分析运行时成本的任何
  • Java Eclipse 插件开发 - 以编程方式保存所有项目文件

    我正在为 Eclipse 开发一个插件 我希望它建议用户在运行之前保存未保存的资源 这与 eclipse 建议您在调试之前保存未保存的文件的行为类似 本质上 我想打开以下对话框 任何帮助将不胜感激 如果您在该对话框上按 alt shift
  • Hibernate 中带有连接表的分页

    对此有很多疑问 但我找不到具体的答案 我是 Hibernate 新手 正在尝试实现分页 假设我有两个实体 Parent 和 Child 定义如下 Entity Table name Parents public class Parent I
  • 如何获取 .net 中数组的唯一值?

    假设我有这个数组 MyArray 0 aaa MyArray 1 bbb MyArray 2 aaa 是否有一个 net 函数可以给我唯一的值 我想要这样的东西作为函数的输出 输出数组 0 aaa 输出数组 1 bbb 假设您有 Net 3
  • Apache 别名“最佳猜测”文件名

    使用 Apache 和 mod rewrite 我可以将复杂的请求重写为简单的文件名 例如 RewriteRule shortcut long way around 1 这可以反过来吗 我希望将一个简单的请求重写为未知文件 但我可以通过文件
  • Javamail 更改主题行的字符集

    我正在使用 Javamail javax mail 发送邮件 我成功地将邮件内容调整为utf 8 但是我无法将主题行设置为 utf 8 编码字符串 我什至尝试过 mail setSubject new String subject getB
  • Webpack Uglify 导致路由停止工作

    当我丑化 webpack 包时 路由停止工作 没有任何错误消息或日志消息 我正在使用 oclazyload 来延迟加载 Route js module exports function app var routeConfig functio
  • 不以某些文字开头的 ASP.NET MVC 路由

    我需要为 url 创建一条不从某些文字开始的路由 我创建了以下路由定义 routes MapRoute something new Controller Home Action Index new something sampleliter
  • ARM 汇编中 ADRP 和 ADRL 指令的语义是什么?

    ADRP http infocenter arm com help index jsp topic com arm doc dui0802a ADRP html 4KB 页的地址 位于 PC 相对偏移处 ADRL http infocent
  • 如何使用c#压缩Ms Access数据库

    是否可以使用 C 压缩 Msaccess 数据库 如果可以的话请告诉我方法 你可以尝试这样的事情 public static void CompactAndRepair string accessFile Microsoft Office
  • 使用 .NET 5 Web api 和 Lambda RIE 在本地测试 AWS Lambda 容器

    我正在按照说明在本地测试 lambda 容器https docs aws amazon com lambda latest dg images test html https docs aws amazon com lambda lates
  • 增加文件上传大小 WordPress / IIS 7

    我正在尝试增加 WordPress 博客中的文件上传大小 以允许管理员发布他的电子书和大型 PDF 文件 该网站托管在 GoDaddy IIS 7 上 我尝试了以下操作 但没有成功 网络配置
  • Ruby 的 %q / %Q 引用方法有什么用例?

    我一直在阅读 Thomas 的 Programming Ruby 1 9 并发现了替代的分隔单引号和双引号方法 q Q 我也从其他 Ruby 语言参考资料中了解了它们 q I m acting like a single quoted st
  • Postgres:如果不存在则插入,否则返回行[重复]

    这个问题在这里已经有答案了 在一个 SQL 语句中 我尝试插入一行 如果由于约束而失败 则返回现有行 I have INSERT INTO session token expiry SELECT abcdefg 2014 05 14 20