当前位置: 首页 > 知识库问答 >
问题:

Postgresql中的id列位置重要吗?

傅正豪
2023-03-14

我正在测试一个删除主键列id的迁移(我希望使用外键作为主键)。当我运行并恢复迁移时,我看到表的状态是相同的,只是id列现在是最后一个。

它会以任何方式改变我的数据库的行为吗?我应该在迁移还原代码中恢复列顺序吗?

共有1个答案

高功
2023-03-14

理论上,一切都应该很好,但总有一些情况下,您的代码可能会失败。

例如:

a)盲插入:

 INSERT INTO tab_name
 VALUES (1, 'b', 'c');

盲插入是指插入查询没有指定哪些列接收插入的数据。

为什么这是坏事?

>

  • 查询失败。这是最好的情况。有人从目标表中删除了一列,现在插入没有足够的列,或者有人更改了数据类型,插入的类型不兼容,等等。但至少您的数据没有被损坏,您甚至可能因为错误消息而知道问题的存在。

    查询继续工作,没有任何问题。这是一种中等最坏的情况。你的数据没有损坏,但怪物还藏在床底下。

    b)按oridinal顺序

    SELECT *
    FROM tab
    ORDER BY 1;
    

  •  类似资料:
    • 我确实在PostgreSQL中创建了一个表,带有列id序列主键。查看pgAdmin中列的属性,我可以看到: 数据类型:整数 默认:nextval(items_id_seq::regclass) (因此,如果我没有弄错的话,我确实是用“serial”关键字创建的。) 现在在我的后端代码中,我使用的方法是:jpaRepository。deleteAllInBatch(),它将“截断”我的整个表。 在这

    • 问题内容: 假设我有以下情况: 和 然后首先访问,进入然后通知它并返回状态。调用在方法中的位置重要吗?即使将调用放置在方法内部的不同位置,我也没有注意到行为的变化。 拨打电话时,是否应立即通知? 问题答案: 该位置的内通话块并 不会 因为根据定义无所谓,如果你仍然在块,那么你仍然持有锁。 调用notify()时不应该立即通知线程吗? 是。调用将等待队列(等待条件)中的线程之一(如果有)放入阻塞队列

    • 这是我的主班 这是我的控制器类 这是我的fxml文件 我怎么才能修好它?我从这里尝试一切JavaFX“位置是必需的”即使它在同一个包中 更新:

    • 我试图确定数组中的位置。我真的不确定如何处理这种情况

    • 问题内容: 我的表有一堆列,格式如下: 我想重命名它们只是添加一个前缀,如下所示: 我有 很多 比三列更用这种方式来命名。如果我只有三个人,那我会手动一个接一个地做。 实现这一目标的最快/最有效的方法是什么? 问题答案: …对于所有此类批量管理操作,您可以使用PostgreSQL系统表为您生成查询,而无需手动编写查询 在您的情况下,它将是: 这将为您提供一组字符串,这些字符串是SQL命令,例如:

    • 问题内容: 我正在与Spring和Hibernate一起使用Java开发Web应用程序。假设我有一张桌子。当我从该表中删除一些记录时,有时我需要重置主键字段的值。 假设我在一个表中有10条记录,而我删除了最后5条记录。现在,当我插入新记录时,主键字段的值应从开始,但应从开始。 如果需要在MySql 中的()处启动主键值,则只需执行以下SQL语句。 这将自动重置价值,以该字段的值(在概念是不正确的,