Skip to content

Instantly share code, notes, and snippets.

@kam-daniel
Last active September 24, 2024 17:28
Show Gist options
  • Save kam-daniel/de192691da49a83a9fcc700ab8c448a6 to your computer and use it in GitHub Desktop.
Save kam-daniel/de192691da49a83a9fcc700ab8c448a6 to your computer and use it in GitHub Desktop.
Postgres view column getter with casting for migrating views to functions and maintaining legacy
WITH
my_table_name AS
(
SELECT 'v_forecast_summary' AS table_name
)
, colpad AS
(
SELECT
MAX(length(columns.column_name)) AS pad
FROM information_schema.columns
WHERE columns.table_name LIKE (SELECT table_name FROM my_table_name)
)
, datatypepad AS
(
SELECT MAX(length(columns.data_type || COALESCE('(' || columns.character_maximum_length || ')',''))) AS pad
FROM information_schema.columns
WHERE columns.table_name LIKE (SELECT table_name FROM my_table_name)
)
SELECT ' ' || (SELECT table_name FROM my_table_name) || '.' ||
STRING_AGG
(
rpad
(
columns.column_name
, (
SELECT pad FROM colpad
)
, ' '
) || ' ::' || RPAD(columns.data_type || COALESCE('(' || columns.character_maximum_length || ')',''),(SELECT pad FROM datatypepad)) || ' AS ' || columns.column_name
, E'\n, ' || (SELECT table_name FROM my_table_name) || '.' ORDER BY columns.ordinal_position
) AS column_names
FROM information_schema.columns
WHERE columns.table_name = (SELECT table_name FROM my_table_name);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment