Primitive types
Primitive types store basic values such as numbers, text, booleans, and dates.
Table of Content
Null Values
Definition:
NULL represents a missing or unknown value.
Notes:
Not the same as
0,''(empty string),{}(empty object),[](empty array), or any zero-equivalent.Columns omitted during
INSERTgetNULLvalues.Outer joins produce
NULLfor unmatched rows.Use
NOT NULLto preventNULLvalues.
Examples:
-- Create table
CREATE TABLE users (
first_name TEXT,
surname TEXT
);
-- Insert with NULL surname
INSERT INTO users (first_name) VALUES ('Alice');
-- Query
SELECT first_name, surname
FROM users
WHERE first_name = 'Alice';
-- Result: Alice | NULLPreventing NULL values:
CREATE TABLE users_with_surnames (
first_name TEXT,
surname TEXT NOT NULL
);
-- This will fail:
INSERT INTO users_with_surnames (first_name) VALUES ('Alice');
-- ERROR: "surname" must not be nullBoolean
Definition:
Stores a logical value: TRUE or FALSE.
Example:
CREATE TABLE my_table (active BOOLEAN);
INSERT INTO my_table (active) VALUES (true);
SELECT * FROM my_table;
-- Result: TRUEVARCHAR(n)
Definition:
Variable-length strings, maximum n characters (1 ≤ n ≤ 2^31 - 1).
Behavior:
Exceeding
ncauses an error (unless cast).Trailing spaces are truncated.
Casting truncates without error.
Example:
CREATE TABLE users (
id VARCHAR,
name VARCHAR(3)
);
-- Error on length overflow
INSERT INTO users (id, name) VALUES ('1', 'Alice Smith');
-- ERROR: too long for the text type of length: 3
-- Trailing spaces truncated
INSERT INTO users (id, name) VALUES ('1', 'Bob ');
SELECT id, name, char_length(name) FROM users;
-- Result: 1 | Bob | 3
-- Casting truncates without error
SELECT 'Alice Smith'::VARCHAR(5) AS name;
-- Result: AliceCHARACTER(n)
Definition:
Fixed-length strings, blank-padded to n characters.
Behavior:
Over-length values cause an error (unless cast).
Shorter values are right-padded with spaces.
Casting truncates without error.
Example:
CREATE TABLE users (
id CHARACTER,
name CHAR(3)
);
-- Right-padding
INSERT INTO users (id, name) VALUES ('1', 'Bo');
SELECT id, name, char_length(name) FROM users;
-- Result: 1 | Bo | 3TEXT
Definition: Unbounded variable-length Unicode text.
Notes:
Max indexed length: 32,766 bytes (UTF-8) for column store.
Use
OBJECTfor structured JSON-like data.
Example:
CREATE TABLE users (name TEXT);
INSERT INTO users (name) VALUES ('🌻 Alice 🌻');
SELECT * FROM users;
-- Result: 🌻 Alice 🌻json
Definition: PostgreSQL-compatible JSON type (only for casting, not table columns).
Examples:
-- String to JSON
SELECT '{"x": 10}'::json;
-- Result: {"x": 10}
-- JSON to OBJECT
SELECT ('{"x": 10}'::json)::object;
-- Result: {"x": 10}
-- OBJECT to JSON
SELECT {x=10}::json;
-- Result: {"x":10}Numeric types
CrateDB supports:
SMALLINTINTEGERBIGINTNUMERIC(precision, scale)REALDOUBLE PRECISION
Notes:
REALandDOUBLE PRECISIONare inexact (floating-point).Aggregates (
SUM,AVG) on floats may vary slightly due to rounding.Supports IEEE 754 special values:
NaN,Infinity,-Infinity,-0.
Example:
SELECT
0.0 / 0.0 AS a, -- NaN
1.0 / 0.0 AS b, -- Infinity
1.0 / -0.0 AS c; -- -InfinityInserting special values:
CREATE TABLE my_table (
col_dp DOUBLE PRECISION,
col_r REAL
);
INSERT INTO my_table (col_dp, col_r)
VALUES ('NaN', 'Infinity');
SELECT col_dp, col_r FROM my_table;
-- Result: NaN | InfinityLast updated

