Summary
null stores NULL in any nullable column.
text
Any string. Numbers and booleans are converted to their text form, so42 stores "42". Objects and arrays are rejected. Use jsonb for structured values.
integer
Whole numbers from -2,147,483,648 to 2,147,483,647. Accepts a JSON integer such as42, or a string of digits such as "42" or "-7". Decimals such as 4.5 are rejected. Values outside the range fail with an Invalid value error.
For larger whole numbers, use numeric.
numeric
Exact decimal numbers with no fixed precision, suited to money and measurements. Accepts a finite JSON number such as1499.99 or a numeric string such as "1499.99".
Results return numeric values as strings, such as "1499.99", so no precision is lost in JSON. Convert them when you do arithmetic.
boolean
true or false. The strings "true" and "false" are also accepted. Other values, including 1, 0, "yes", and "no", are rejected.
timestamptz
A point in time. Send an ISO 8601 string with a time zone:2026-11-03 (midnight UTC). Results always return ISO 8601 in UTC with milliseconds, such as "2026-11-03T09:00:00.000Z".
A timestamptz column can default to now(), the time of the insert.
uuid
A UUID string such as"0b7c1f7e-6f0e-4d3a-9a51-2f7c3d1b8e44". Use uuid columns for foreign keys, since every table’s id is a UUID. See Foreign keys.
A uuid column can default to gen_random_uuid(), a new random UUID for each row.
jsonb
Any JSON value: an object, array, string, number, boolean, ornull.
jsonb values as JSON text, such as {"tags": ["fiction"]}. Filters can’t reach inside jsonb values. Use like or ilike on the JSON text, or store values you filter on in their own columns.
Size limits
Defaults
Only two defaults exist, and each requires a matching type:
Defaults can be set through MCP tools. The web app’s table forms don’t set defaults.