postgresql - 具有限制的 Postgres 更新表
问题描述
当我将限制与更新语句一起使用时,Postgres 失败
我只想更新表的第一条记录
UPDATE test1 SET name="user101" LIMIT 1;
当我使用限制时,这在 postgres 中失败;
我可以做这个
UPDATE test1 SET name="user101"
WHERE ID =(SELECT ID FROM test1 LIMIT 1)
但是要使用上面的 sql,我应该知道列名(ID)并且在我的情况下我无权访问列名。
我需要一个不需要列名但只更新第一条记录的 sql 语句。
更新:
我正在使用 ruby@db.exec(query)
执行查询
我们将如下不同的 sql 语句传递给调用的方法@db.exec(query)
- 更新 table1 设置 t1_name = "123" 限制 1;
- 更新表2设置一些东西=“xyz”限制1;
- 更新 table3 设置 som = "abc" 限制 1;
现在在打电话之前@db.exec(query)
我想修改查询,使查询不会使用limit
在这种情况下,我可以访问要更新的表名、列名。但我无权访问任何其他列名 (ID)。
解决方案
虽然我认为这种方法有一种非常难闻的味道(什么样的应用程序将随机行的更新发送到数据库),但您可以使用ctid
始终可用的内部列。
UPDATE test1
SET name = 'user101'
WHERE ctid = (SELECT ctid FROM test1 LIMIT 1)
推荐阅读
- xpath - 在 Google 电子表格中获取 HTML 标记元素
- python - 如何在 Python 中将邻接列表转换为邻接矩阵
- angular - 从另一个函数的 ngOnInit 访问本地变量
- visual-studio-code - VScode windows 10“设置”在终端中不起作用
- c++ - 使用 cuda 的结构内的 GPU 并行化函数
- javascript - 翻译后的元素回到原点?
- javascript - 如何根据对象的索引号解析json
- dataweave - Dataweave 中是否存在 XML 标签
- algorithm - 2D 线段树更新/修改步骤复杂度
- javascript - Rails 6.1 活动文本 Javascript 错误