add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
CREATE TABLE vehicle (veh_id int, vehicle_types text[]);
INSERT INTO VEHICLE values
(1, '{byd_tang,volt,viper,laferrari}')
, (2, '{volt,viper}')
, (3, '{byd_tang,sonata,jaguarxf}')
, (4, '{swift,teslax,mirai}')
, (5, '{volt,viper}')
, (6, '{viper,ferrariff,bmwi8,viper}')
, (7, '{ferrariff,viper,viper,volt}')
, (8, '{}') -- additional test rows
, (9, null);

9 rows affected
SELECT *, ARRAY(SELECT DISTINCT unnest (vehicle_types)) AS vehicle_types_uni
FROM vehicle;

veh_id vehicle_types vehicle_types_uni
1 {byd_tang,volt,viper,laferrari} {volt,laferrari,viper,byd_tang}
2 {volt,viper} {volt,viper}
3 {byd_tang,sonata,jaguarxf} {sonata,jaguarxf,byd_tang}
4 {swift,teslax,mirai} {teslax,swift,mirai}
5 {volt,viper} {volt,viper}
6 {viper,ferrariff,bmwi8,viper} {bmwi8,ferrariff,viper}
7 {ferrariff,viper,viper,volt} {ferrariff,volt,viper}
8 {} {}
9 null {}
-- preserve original order
SELECT *, ARRAY (SELECT v
FROM unnest(vehicle_types) WITH ORDINALITY t(v,ord)
GROUP BY 1
ORDER BY min(ord)
) AS vehicle_types_uni
FROM vehicle;
veh_id vehicle_types vehicle_types_uni
1 {byd_tang,volt,viper,laferrari} {byd_tang,volt,viper,laferrari}
2 {volt,viper} {volt,viper}
3 {byd_tang,sonata,jaguarxf} {byd_tang,sonata,jaguarxf}
4 {swift,teslax,mirai} {swift,teslax,mirai}
5 {volt,viper} {volt,viper}
6 {viper,ferrariff,bmwi8,viper} {viper,ferrariff,bmwi8}
7 {ferrariff,viper,viper,volt} {ferrariff,viper,volt}
8 {} {}
9 null {}
-- according UPDATE
UPDATE vehicle
SET vehicle_types = ARRAY (
SELECT v
FROM unnest(vehicle_types) WITH ORDINALITY t(v,ord)
GROUP BY 1
ORDER BY min(ord)
)
WHERE cardinality(vehicle_types) > 1
AND vehicle_types <> ARRAY (
SELECT v
FROM unnest(vehicle_types) WITH ORDINALITY t(v,ord)
GROUP BY 1
ORDER BY min(ord)
) -- suppress empty updates (optional)
RETURNING *;
veh_id vehicle_types
6 {viper,ferrariff,bmwi8}
7 {ferrariff,viper,volt}
TABLE vehicle;
veh_id vehicle_types
1 {byd_tang,volt,viper,laferrari}
2 {volt,viper}
3 {byd_tang,sonata,jaguarxf}
4 {swift,teslax,mirai}
5 {volt,viper}
8 {}
9 null
6 {viper,ferrariff,bmwi8}
7 {ferrariff,viper,volt}