V58: Timestamp Column Type Standardization (timestamptz)
Converts ALL timestamp columns across all 68 PhoenixKit tables from
timestamp without time zone (aka timestamp(0)) to
timestamp with time zone (aka timestamptz).
This completes the DateTime standardization:
- Steps 1-4 (prior): Elixir schemas →
:utc_datetime/DateTime.utc_now() - V58: PostgreSQL columns →
timestamptz
Why timestamptz?
PostgreSQL timestamp stores values without timezone context. While PhoenixKit
always stores UTC, timestamptz makes this explicit at the database level and
is the PostgreSQL-recommended type for timestamps. Ecto's :utc_datetime type
maps to timestamptz natively.
Conversion Safety
The up direction needs no USING clause — PostgreSQL implicitly treats
existing timestamp values as UTC when casting to timestamptz.
The down direction requires USING col AT TIME ZONE 'UTC' to explicitly
convert timestamptz back to timestamp(0).
Idempotency
All operations check:
table_exists?/2— skip if table doesn't exist (optional modules)column_exists?/3— skip if column doesn't existcolumn_is_timestamptz?/3— skip if already converted (up) or already reverted (down)