Does PG somehow support the ability to set a column to "variable type"?
AFAIK know there is no such union type. I would consider this a last resort, but here is a sketch if you truly need such type:
CREATE TABLE T
( attribute_key text not null
, attribute_value text not null
, attribute_type smallint not null -- example 1=int, 2=...
);

You can add a type check like:
attribute_type = 1 =&gt; attribute_value ~ '^[0-9]+'

and so forth. The above rule would be:
CHECK( attribute_type &lt;&gt; 1 or attribute_value ~ '^[0-9]+' );

The other option I could think of is to use XML to store the value. You can create a schema for the data types you are supporting, and validate against that schema during insert.