Arrays Postgres阵列中的排序可靠性如何?

Arrays Postgres阵列中的排序可靠性如何?,arrays,postgresql,postgresql-9.5,Arrays,Postgresql,Postgresql 9.5,我有store表: CREATE TABLE store( id SERIAL, product_ids INT[], product_prices NUMERIC[] ) 例如: id | product_ids | product_prices ---------------------------------- 1 | {12, 4} | {100, 202.5} 这意味着ID为12的产品的价格为100,而ID为4的产品的价格为202.5。产品\u id数组中的

我有
store
表:

CREATE TABLE store(
  id SERIAL,
  product_ids INT[],
  product_prices NUMERIC[]
)
例如:

id | product_ids | product_prices 
----------------------------------
1  | {12, 4}     | {100, 202.5}
这意味着ID为
12
的产品的价格为
100
,而ID为
4
的产品的价格为
202.5
产品\u id
数组中的id是唯一的

如果产品
id=4
有一个新的价格,例如
199
,我会这样更新它:

UPDATE store SET 
product_prices [idx(product_ids , 4)] = 199
WHERE id = ?
这些数组中元素的顺序非常重要。我从不对这些数组进行排序,可能只是使用
array\u append()
添加一个新的产品id和适当的价格

所以问题是:Postgres数组中的排序有多可靠?有没有可能有一天Postgres会自己排序数组或交换元素位置


另外,我需要用数组来实现这一点,我不想使用其他具有列
store\u id
product\u id
product\u price
等的表。

不,Postgres不会自行更改数组的顺序。如果数据库这样做,我们都会遇到很多麻烦。

这种非规范化设计的原因是什么?你甚至不能用这种型号的外键。或者防止同一产品以不同的价格出现两次。如果您需要对其运行(真实世界)报告,它将变得相当复杂。原因是self
存储的数量很大,大约为50万,但每个存储的产品不会太大(最多5000),因此如果使用正常的数据库设计来存储此数据,例如,在不同的表中,行数将非常巨大,在这种情况下,
product\u id
product\u prices
数组将最多包含5000个元素。
或防止同一产品以不同的价格出现两次
-在将product id添加到
product\u id
数组之前,我检查数组中是否存在此id,如我所述,我会进行价格更新,如果没有,那么我会在适当的数组末尾添加新的产品id及其价格
,如果您需要对其运行(真实世界)报告,这将变得非常复杂,因为报告将仅来自一个具体商店(而不是来自多个商店),执行数据和制作报告将很容易,因为这种混凝土的产品数量很少store@a_horse_with_no_name这就是这种非规范化设计的原因:)