【问题标题】:Strange result from basic SELECT * FROM x query in postgres [duplicate]postgres中基本SELECT * FROM x查询的奇怪结果[重复]
【发布时间】:2020-10-31 17:55:41
【问题描述】:

在执行基本的SELECT * FROM program 查询时,我注意到一些奇怪的行为:

我正在使用GenerationType.IDENTITY 并一次插入整个程序对象列表。我可以将ORDER BY db_id 添加到我的查询中,但我很感兴趣为什么会发生这种行为。直到今天还不错。 也尝试了GenerationType.AUTO,但没有任何改变......

我的模特:

@Entity
@Table(name = "program", indexes = { @Index(name = "channelindex", columnList = "channel", unique = false) })
public class OutputProgram {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer db_id;
private String category;
private String title;
....

每次都会插入一些8k的程序...

【问题讨论】:

  • 您的查询不包含 order by。没有 order by 就无法保证查询结果的顺序。你所拥有的可能不寻常,但不会出乎意料。
  • 不相关,但是:为什么不将 JSON 值存储在 jsonb(或至少 json)列中?
  • PosrgreSQL 中不保证顺序,除非指定。 postgresql.org/docs/current/queries-order.html
  • @a_horse_with_no_name 这是服务器上的 db,rest 控制器返回我使用我的 android 应用程序访问的 json。category 列是我将字符串作为 json 插入的唯一一个,因为每一行可能包含 0-n 个类别所以我认为这可能是将android中的数据作为json数组读取的最简单方法。我会受益于将category 存储在json 而不是String 中吗?对您的问题感到好奇,我尝试将 compile group: 'com.vladmihalcea', name: 'hibernate-types-52', version: '2.9.12' 添加到我的 gradle 并将 '@Type(type = "json")' 添加到我的类别列但它不起作用......
  • 您应该为您存储的值选择正确的数据类型。您也不会在 varchar 列中存储数字或日期值。您可以从jsonb 为您提供的语法检查中受益,并且您可以使用许多JSON operators 而无需转换开销。顺便说一句:255 的任意限制不会给您带来任何性能或存储优势,例如276 或 242(以防您假设。如果您的混淆层(又名“ORM”)无法正确使用正确的数据类型,我会质疑它的选择。

标签: sql postgresql jpa jdbc


【解决方案1】:

除非指定,否则在 PosrgreSQL 中不保证顺序。 https://www.postgresql.org/docs/current/queries-order.html

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 2016-11-21
    • 2018-09-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多