Remap array columns to single column with value Here is the sample database schema.
| id |  Critical     |  High  |    Low     |
--------------------------------------------
| 1  | {apple, ball} |  {cat} | {dog, egg} |

Now I want to remap these to another table. Critical set to 1, High to 2 and Low to 3 like:
| element | priority |
----------------------
|  apple  |   1      |
|  ball   |   1      |
|  cat    |   2      |
|  dog    |   3      |
|  egg    |   3      |

1,2,3 can be changed to column name too.
I've written a query to do it for 1 column at a time:
insert into new_table (element, priority)
select unnest(critical), 1 from old_table where id=1;

But I want to do all the 3 columns in this single query.
I want it fast performing. Is UNION the most efficient way?
UNION ALL, not UNION:
SELECT id, unnest(critical) AS element, 1 AS prio FROM tbl
UNION ALL SELECT id, unnest(high)     , 2         FROM tbl
UNION ALL SELECT id, unnest(low)      , 3         FROM tbl;

Optionally drop the id (like in your displayed result), but I suspect you need it.
For big tables, a LATERAL subquery may be faster as it only uses a single sequential scan:
SELECT sub.*
FROM   tbl t
CROSS  JOIN LATERAL (
      SELECT id, unnest(t.critical) AS element, 1 AS prio
   UNION ALL SELECT id, unnest(t.high)        , 2
   UNION ALL SELECT id, unnest(t.low)         , 3
   ) sub;

db&lt;&gt;fiddle here
Otherwise, this question seems like a subset of your later more complex question:

Unnest ids from arrays based on priority with no duplication