PostgreSQL でデータをアンピボット (列を行に変換) する方法があることを知りたいです。
たとえば、次のようなテーブルがあるとします。
ID Name Age
1 Alice 16
2 Bob 21
3 Carl 18
次のような出力を得たい
ID Column_Name Column_Value
1 Name Alice
1 Age 16
2 Name Bob
2 Age 21
3 Name Carl
3 Age 18
私はそれを次のようにできることを知っています(それを試すためにデータをいじるSQL):
select
U.ID,
unnest(array['Name', 'Age']) as Column_Name,
unnest(array[U.Name, U.Age::text]) as Column_Value
from Users as U
しかし、列名を明示的に指定せずに、テーブル内のすべての列に対してそれを行う方法はありますか? たとえば、SQL Server の場合、動的 SQL またはデータを xml に変換して xml を解析する - SQL Server : Columns to Rowsの少なくとも 2 つの方法を知っています。PostgreSQLにもいくつかのxmlトリックがあるのでしょうか?