All notable changes to this project are documented here. The format follows Keep a Changelog.
pgmalli/inserts: a dataset as HoneySQL INSERT maps, parents first and rows referred to
first, enum / json / array values in the form the driver needs, generated columns left out,
identity values kept.
Unique indexes over plain columns (no expression, no predicate) are read as :pg/unique,
since datasets must respect them as much as UNIQUE constraints.
A generated range column (tsrange(valid_from, valid_until)) gives its two columns a CHECK,
named <column>_generated, since the database refuses a range whose bounds are reversed.
pgmalli/inserts takes {:on-conflict :nothing} for a database that already holds some rows.
col = 'a' AND ... OR col = 'b' AND ...) let every other value of the
column through; now only NULL passes without a branch, as the database has it.col IS NOT NULL on a json or jsonb column (or any column of type :any) did not reject
NULL; it is :some now, and the dataset generator draws such a column from the column's
own type rather than from :some.pgmalli/stale returns the differences by registry entry and, for row and insert schemas,
by column, property and CHECKs, each with its file and database sides; check prints one
line per difference instead of the EDN diff.pgmalli.honeysql: an ambiguous column problem carries the tables it could belong to, under
:candidates.pgmalli/column and pgmalli/non-null: one column's schema, with and without its
[:maybe ...].pgmalli/as-read: the row map as a JDBC result builder returns it (qualified keys, absent
NULL columns, kebab-case keys, timestamps as Instants or LocalDateTimes).pgmalli/portable: the named schema as data malli's default registry reads, for
:malli/schema metadata and tools that cannot take the registry.pgmalli.honeysql: HoneySQL query data checked against the registry (tables; selected,
inserted, set and compared columns; required INSERT columns; enum literals) and typed
(parameters, rows, a function schema for instrumentation), without a database.:pg.<schema>/<view> row schemas: columns and types, every
column nullable, :pg/view on the map. They get no insert schema and are not part of
datasets.smallint and integer columns are :pg/smallint and :pg/integer, schema types
pgmalli registers with the PostgreSQL range inside, narrowed by the :min and :max a
CHECK adds; the generated files no longer spell the range out.:database-version is the server version alone ("PostgreSQL 17.6"), the same on every
machine that generates.:pg/check and :pg/check-value: every CHECK that no column pattern covers is kept as
expression data and evaluated with PostgreSQL's semantics (NULL passes, AND, OR and
COALESCE stop at the first decisive operand, casts convert, the schema's own enum and
domain literals are values, now() is the validation time). The vocabulary covers
comparison, logic, arithmetic, the common string, numeric, array and jsonb functions and
operators, LIKE, regexes and CASE; a CHECK outside it is listed in :unrendered.
jsonb values with string or keyword keys are read alike.[:multi ...]; ORs of column patterns
[:or ...]; neither is ever enforced in part.:pg.<schema>.<table>/insert schemas, derived when a registry is loaded: identity ALWAYS
and generated columns removed, identity BY DEFAULT, defaulted and nullable columns
optional, closed maps; the table's constraints see omitted columns as their literal
defaults, else NULL.:pg/table ("schema.table"), :pg/primary-key, :pg/unique
({:columns} maps, :nulls-distinct false for NULLS NOT DISTINCT) and :pg/foreign-keys
({:columns :table :to} maps, :match :full for MATCH FULL) on the map; columns carry
:pg/identity (:always, :default, :serial) and :pg/generated.[:pg/check-value expr];
a domain's NOT NULL and DEFAULT reach its columns; :overrides apply to domain CHECKs.LIKE, NOT IN, cardinality, array_length, boolean and uuid value
sets; bounds and value sets from several constraints tighten and intersect.smallint and integer carry their range; numeric(p, s) its magnitude bound; bytea
with a length CHECK is [:pg/bytes {:min :max}], a type that generates byte arrays.date, time, timetz, timestamp, timestamptz and interval map to
malli.experimental.time schemas.pgmalli/columns, pgmalli/transformer (with a :zone option; JSON text in json and
jsonb columns is parsed), pgmalli/dataset-schema (every key set and reference a named
check; NULLS NOT DISTINCT and MATCH FULL respected) and pgmalli/dataset-generator
(:rows, :except; references sharing columns solved together, self-references included;
a reference that finds no fitting row grows its target table; tables that come out short
are listed in the dataset's metadata with the reasons). Registries add generation hints when
loaded, so key columns are small positive integers, strings short and times recent.:unknown-type.(pgmalli/registry "public"). malli is
a dependency of the library.[:and [:string {:min 1}] [:re "\S"]].pgmalli/path and the by-path forms of registry and unrendered.psql.pgmalli.core (generate!, path, registry, stale, unrendered) and the
pgmalli.main command line.Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |