我有一个包含网络资产的数据库,每个都可以有多个主机名。有时,我们会错误地为同一台机器创建两条记录,然后不得不“合并”这些资产。其中一部分是合并他们的主机名列表。
我当前的解决方案涉及将合并资产的hostnames字段设置为以下选择:

SELECT array_agg(DISTINCT host)
FROM (
  SELECT unnest(hostnames)
  FROM asset
  WHERE asset.id IN (?, ?)
) AS bothassets(host);

(见SQL Fiddle
在PSQL中是否有一种更清晰的方式来表示相同的“唯一数组值”逻辑?组合数组的顺序对我来说无关紧要,但我不能让它包含两次相同的值。

最佳答案

我觉得没有更干净的方法了。
只有一点点短:

SELECT ARRAY(
  SELECT DISTINCT unnest(hostnames)
  FROM asset
  WHERE asset.id IN (?, ?)
  -- ORDER BY 1
);

关于postgresql - 在PostgreSQL中连接varchar [],保持不同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37934110/

10-16 11:41