在 PostgreSQL 中连接 varchar[],保持不同的值

Concatenate varchar[]'s in PostgreSQL, keeping distinct values

我有一个包含网络资产的数据库,每个资产可以有多个主机名。有时,我们会错误地为同一台机器创建两条记录,然后以后必须 "merge" 这些资产。其中一部分是合并他们的主机名列表。

我目前的解决方案涉及将合并资产的 hostnames 字段设置为以下内容 select:

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

(见SQL Fiddle

是否有更简洁的方法来表示 PSQL 中相同的 "unique array values" 逻辑?组合数组的顺序对我来说并不重要,但我不能让它包含两次相同的值。

我认为没有更简洁的方法。

只有一点点:

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