如何在 postgres 数据库上切换两个 ID [PK]?

2023-12-29

我想更改 Postgres 上两行的 ID,以切换它们。它们已经被定义为外键,所以我不能使用第三个数字来进行切换。

如何在一个 SQL 查询或事务中执行此操作?

Example:

UPDATE mytable SET id=2 WHERE ID=1;
UPDATE mytable SET id=1 WHERE ID=2

您提到了外键,但尚不清楚是否id是外键约束的引用或引用列。

If id是引用的列你只需定义 fk 约束ON UPDATE CASCADE http://www.postgresql.org/docs/current/interactive/sql-createtable.html。然后你可以改变你的id只要你想要的。更改会级联到相关列。


If id是参考列(并且没有其他外键约束指向它),那么还有另一种更快的方法,因为PostgreSQL 9.0。您可以使用可延迟的主键或唯一键。考虑以下演示:

Note如果你想引用你就不能使用这个id with a 外键来自另一个表的约束。我引用手册here http://www.postgresql.org/docs/current/interactive/sql-createtable.html:

引用的列必须是不可延迟唯一的列 或引用表中的主键约束。

Testbed:

CREATE TEMP TABLE t
( id integer
 ,txt text
 ,CONSTRAINT t_pkey PRIMARY KEY (id) DEFERRABLE INITIALLY DEFERRED
);
INSERT INTO t VALUES
 (1, 'one')
,(2, 'two');

Update:

UPDATE t
SET    id = t_old.id
FROM   t t_old
WHERE (t.id, t_old.id) IN ((1,2), (2,1));

Result:

SELECT * FROM t; 

id | txt
---+-----
2  | one
1  | two

您还可以声明约束DEFERRABLE INITIALLY IMMEDIATE并使用SET CONSTRAINTS ... DEFERRED在同一笔交易中。

请务必阅读手册中的详细信息:

  • CREATE TABLE http://www.postgresql.org/docs/current/interactive/sql-createtable.html
  • SET CONSTRAINTS http://www.postgresql.org/docs/current/interactive/sql-set-constraints.html

甚至似乎与DEFERRABLE INITIALLY IMMEDIATE and no SET CONSTRAINTS。我发布了一个对此的疑问 https://stackoverflow.com/q/10032272/939860.

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

如何在 postgres 数据库上切换两个 ID [PK]? 的相关文章

  • 我应该使用平面表还是标准化数据库?

    我目前正在开发一个使用 MySQL 数据库作为后端的 Web 应用程序 在继续下一步之前 我需要知道什么更适合我的情况 简而言之 在这个应用程序中 用户将能够使用任何数字字段 他们决定 构建自己的表单 现在我将其全部存储在通过外键链接的几个
  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • 使用 .NET 中的类型化数据集将 SQL 参数传递给 IN() 子句

    首先道歉 因为该网站上有类似的问题 但没有一个直接回答这个问题 我在 VS 2010 中使用类型化数据集 我在数据集中创建一个 TableAdapter 查询如下 SELECT from Table WHERE ID IN IDs 现在如果
  • TSQL - 生成文字浮点值

    我理解比较浮点数时遇到的许多问题 并对它们在这种情况下的使用感到遗憾 但我不是表格作者 只有一个小障碍需要克服 有人决定使用浮点数 就像您期望使用 GUID 一样 我需要检索具有特定浮点值的所有记录 sp help MyTable Colu
  • 在 MS Access SQL 查询中从正常日期转换为 unix 纪元日期

    我正在尝试编写一个通过 ODBC 连接到 MySQL 数据库的 MS Access 2007 连接的查询 一切工作正常 查询执行我想要的操作 我挂断的部分是我一直在询问用户 unix 纪元时间 而不是常规日期 我查找了 MS Access
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • 以编程方式插入行(父行和子行)

    我正在使用 Spring 和 JDBCTemplate 该场景是 CUSTOMER 表和 ORDERS 表的父子关系 我想做一个插入 例如 1 个客户和 5 个订单 但我不确定如何以编程方式在 CUSTOMER 表中插入一行 如何获取 Or
  • 使用联接更新表?

    我正在尝试使用表 B 中的数据更新表 A 我以为我可以做这样的事情 update A set A DISCOUNT 3 from INVOICE ITEMS A join ITEM PRICE QUNTITY B on A ITEM PRI
  • 错误关系不存在

    我得到了 error relation causes does not exist 我的节点应用程序出现错误 这种关系确实存在 我不确定问题出在哪里 我创建了该表 CREATE TABLE causes cause id bigint NO
  • 使用 NLog .NET Core 将日志记录到 PostgreSQL DB

    我尝试将日志记录集成到 NET Core 中的数据库 我能够设置 NLog 并将消息记录到 SQL Server 这很容易 但是当我尝试将 DB 切换到 PostgreSQL 时 似乎没有记录任何内容 以下是startup cs中的代码 p
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • Snowflake 中的动态 SQL

    当我在雪花中运行动态 SQL 时 遇到以下错误 未完成对 SQL MAIN 的分配 因为值超出了变量的大小限制 它的大小是263 限制为 256 内部存储大小以字节为单位 这是代码 SET v G 1 SET v G1 v G VARCHA
  • 3 个表的 SQL 查询(或联接)

    第一次在 Stack Overflow 上问问题 很棒的资源 但是只有一件事真正让我作为 SQL 新手感到困惑 我有三个表 我想获取与鲍勃的学生相关的所有导师的姓名 表 1 教师 ID Name 1 Bob 表 2 学生 STUDENT I
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 时间序列数据的自连接

    我需要一些帮助来完成我认为应该是相当简单的自连接查询 只需要将两条记录中匹配的开始时间和结束时间合并为一条记录 假设我的表中有以下内容 Time Event 08 00 Start 09 00 Stop 10 30 Start 10 45
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • TimescaleDB 查询选择列值较上一行发生更改的行

    最近刚刚开始使用 TimescaleDB 和 Postgres 来处理大多数数据请求 然而 我遇到了一个问题 即我对时间序列数据的请求效率极低 它是一个可以是任意时间长度 具有特定整数值的数据系列 大多数时候 除非出现异常 否则该值将是相同
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不

随机推荐

  • 一个简单的代码来快速检测任何信标

    我是快速编程的新手 我正在尝试开发检测信标的应用程序 但仍然无法检测到任何信标 let region CLBeaconRegion proximityUUID NSUUID UUIDString 11111111 1111 1111 111
  • Azure SDK、Trace.Information 和 WADLogsTable

    我正在使用 Azure SDK 2 5 在 NET 中编写新的云服务 我知道诊断发生了一些重大变化使用 2 5 SDK rekesae https msdn microsoft com en us library azure dn87397
  • 学习如何编写它们的示例解析器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在寻找可以研究的解析器和 或解析器生成器的源代码 以便进一步发展我在学校课程中获得的技能 您知道任何类型的值得推荐的解析器吗 您应
  • PHP 文件形式的图像

    我对 PHP 相当陌生 我需要知道如何将文件显示为图像 例如 打开http example com script php http example com script php将显示图像 我的理由是我需要把它放在src的属性 img 我希望
  • 获取 Unicode 字符中字符串的“实际”长度

    给定一个像 xe2 x9c xae 例如 可以是其他类似 or 我想找到字符打印在屏幕上时的 实际 长度 例如 len len xe2 x9c xae 两者都返回 3 但它应该是 1 你可以这样尝试 unicodedata normaliz
  • 在 Python 中编译正则表达式

    我正在阅读 Doug Hellman 的 Python 标准库示例 并发现了这一点 1 3 2 编译表达式 re 包含用于将正则表达式作为文本字符串处理的模块级函数 但更有效的是compile程序经常使用的表达式 我无法理解他对为什么会出现
  • 当单选按钮在 Jquery mobile 中处于活动状态时,单选按钮上有不同的颜色

    我有三个单选按钮 它们在 jquery 中具有相同的主题 如果我选择其中之一 按钮的颜色将更改为 css 中的 ui btn active 类中指定的颜色 我的单选按钮名为 可以见面 不确定 和 拒绝 我希望 拒绝 单选按钮在被选中时具有与
  • 将整个页面替换为 ajax 加载页面的内容

    我正在使用 JQuery 并且试图找到一种用 ajax 加载的内容替换整个页面的方法 我找到了建议如何从加载页面执行此操作的答案 但如果可能的话 我想从加载页面执行此操作 我有一个使用大量 ajax 调用的网络应用程序 问题是 如果用户在这
  • 高斯曲线拟合算法

    各位 我一直在尝试获得一些数据集的高斯拟合 这些数据集在某种程度上看起来像扭曲的正态分布 我一直在使用软件来做到这一点 我想知道是否可以应用迭代算法将这些数据集转换为高斯拟合曲线 原始曲线的标准差和平均值作为输入 有任何想法吗 计算数据的平
  • 查找未设置该属性的Neo4j节点

    使用Cypher 如何找到不存在属性的节点 例如我有两个节点 A foo true name A B name B 现在我想找B 在没有的基础上选择它foo属性集 我怎样才能做到这一点 正如迈克尔 饥饿提到的 MATCH n WHERE N
  • HTTP 中的“406-不可接受的响应”是什么?

    在我的 Ruby on Rails 应用程序中 我尝试通过 POSTMAN 上传图像REST http en wikipedia org wiki Representational State Transfer客户在Base64 http
  • 为什么在 docker 中拉取镜像时出现此错误

    我尝试使用以下方法提取图像 docker pull ghcr io linuxserver nextcloud latest 但我收到此错误消息 来自守护进程的错误响应 获取 https ghcr io v2 拨打 tcp 在 1 53 上
  • 将条纹样式添加到项目列表

    使用 KnockoutJS 对列表进行条带化的最佳方法是什么 下面的 div 上的类应该是偶数或奇数 具体取决于它在列表中的位置 并在添加或删除项目时更新 div class Headlines loader div
  • Xamarin 的 Genymotion Android 模拟器

    我在使用 Genymotion Android 模拟器进行 xamarin 开发时遇到问题 我已经安装了 Genymotion 桌面应用程序和其中的几个 Android 设备 每当我通过 Genymotion 桌面应用程序运行任何已安装的设
  • 原型混乱:父原型属性受子原型影响

    我正在读一本关于 OOP javascript 的书 并被其中一个示例困住了 在示例代码的第一个版本中 一个新实例Shape构造函数被创建并且toString方法被调用 这toString方法返回 三角形 这是name的财产Triangle
  • 为什么 write.csv 和 read.csv 不一致? [关闭]

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

    我在 Android 中有一个 ListView 需要能够手动重新排序 Android 的音乐播放器应用程序就是一个示例 您可以更改播放列表中曲目的顺序 我知道如何以编程方式更改 ListView 的顺序 但不知道如何在音乐播放器应用程序中
  • 如何发送PDF文件到前端?

    我的系统上有一个保存的 PDF 文件 我正在尝试使用 node express 将文件发送到前端 我正在将文件作为流 二进制字符串 发送到前端 但是当在前端运行一些代码以将 PDF 下载到用户计算机上时 PDF 文件显示为空白 这是我在服务
  • 在 Spark 中对多个 DataFrame 执行 join

    我有 3 个由 3 个不同进程生成的数据帧 每个数据框都有相同名称的列 我的数据框看起来像这样 id val1 val2 val3 val4 1 null null null null 2 A2 A21 A31 A41 id val1 va
  • 如何在 postgres 数据库上切换两个 ID [PK]?

    我想更改 Postgres 上两行的 ID 以切换它们 它们已经被定义为外键 所以我不能使用第三个数字来进行切换 如何在一个 SQL 查询或事务中执行此操作 Example UPDATE mytable SET id 2 WHERE ID