ColumnOrigin
The relation and column a result column was read from.
That this is here at all says the server tracked the value back to a stored column. Whether the names inside it are filled in says something else: they come from the relation's row type, which the driver reads when it connects and on every reloadTypes(), so they are null for a relation that snapshot does not describe - anything in pg_catalog or information_schema, which the type load skips, and anything created since. The values of such a column decode as they always did; it is only the naming that depends on the catalog.
Constructors
Properties
The column's attribute number within that relation. Negative for a system column such as ctid or xmin, which no row type describes, leaving columnName null.
The column's name in the relation, which an alias in the query may have replaced in ColumnMetadata.name. null when the relation is not described, or when its row type carries no attribute under this number.
The relation's name, or null when the catalog snapshot does not describe the relation.
The OID of the relation, whatever its kind - table, view, materialized view.