【问题标题】:Postgres Update table with limit具有限制的 Postgres 更新表
【发布时间】:2019-10-29 15:27:52
【问题描述】:

当我在 update 语句中使用限制时,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)的方法

  1. update table1 set t1_name = "123" limit 1;
  2. update table2 set something = "xyz" limit 1;
  3. 更新 table3 设置 som = "abc" 限制 1;

现在在致电@db.exec(query)之前

我想修改查询,使查询不会使用limit

在这种情况下,我可以访问要更新的表名、列名。但我无权访问任何其他列名 (ID)。

【问题讨论】:

  • 当您无权访问列名时,您如何知道要更改列 test1
  • @a_horse_with_no_name 我已经更新了我的问题我可以访问我需要更新的表名和列名。
  • 这听起来像是一个糟糕的设计——为什么你不知道你的表的主键?针对表中随机行的更新看起来很奇怪
  • 这只是为了我们的测试目的,我们只想更新单个记录数据(任何记录)。

标签: postgresql


【解决方案1】:

虽然我认为这种方法有一种非常难闻的味道(什么样的应用程序会向数据库发送随机行的更新),但您可以使用内部的ctid 列,它始终可用。

UPDATE test1 
  SET name = 'user101' 
WHERE ctid = (SELECT ctid FROM test1 LIMIT 1) 

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 2020-06-14
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多