postgresql-knowledge-patch

PostgreSQL 17+ Knowledge Patch

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "postgresql-knowledge-patch" with this command: npx skills add nevaberry/nevaberry-plugins/nevaberry-nevaberry-plugins-postgresql-knowledge-patch

PostgreSQL 17+ Knowledge Patch

Claude's baseline knowledge covers PostgreSQL through 16. This skill provides features from 17 (Sep 2024) onwards.

Source: PostgreSQL release notes at https://www.postgresql.org/docs/release/

PostgreSQL 17 (Sep 2024)

SQL/JSON (Major)

Function Purpose Example

JSON_TABLE()

JSON → table rows FROM JSON_TABLE(data, '$.items[*]' COLUMNS (id int PATH '$.id'))

JSON()

Cast text → json JSON('{"a":1}')

JSON_SCALAR()

Scalar → JSON JSON_SCALAR(42)

JSON_SERIALIZE()

JSON → text JSON_SERIALIZE(jsonb_col)

JSON_EXISTS()

Path exists? boolean JSON_EXISTS(data, '$.key')

JSON_VALUE()

Extract scalar as SQL type JSON_VALUE(data, '$.key' RETURNING int)

JSON_QUERY()

Extract JSON fragment JSON_QUERY(data, '$.arr')

jsonpath type methods: .bigint() , .boolean() , .date() , .decimal() , .integer() , .number() , .string() , .time() , .time_tz() , .timestamp() , .timestamp_tz()

MERGE Enhancements

  • WHEN NOT MATCHED BY SOURCE THEN DELETE/UPDATE — act on unmatched target rows

  • RETURNING merge_action(), * — returns 'INSERT'/'UPDATE'/'DELETE' per row

  • Works on updatable views

New SQL Syntax

Feature Syntax

COPY error skip COPY t FROM file WITH (ON_ERROR ignore)

Change generated expr ALTER TABLE t ALTER COLUMN c SET EXPRESSION AS (expr)

Random in range random(1, 100) — works for int, bigint, numeric

Interval infinity 'infinity'::interval , '-infinity'::interval

Session timezone timestamp_col AT LOCAL

Optimizer memory EXPLAIN (MEMORY)

Serialization cost EXPLAIN (SERIALIZE)

New Functions

to_bin(int) , to_oct(int) , uuid_extract_version(uuid) , uuid_extract_timestamp(uuid)

DDL Changes

  • Identity columns on partitioned tables (previously unsupported)

  • Exclusion constraints on partitioned tables (partition key must use equality)

  • MAINTAIN privilege for VACUUM/ANALYZE/REINDEX/REFRESH/CLUSTER/LOCK

  • transaction_timeout GUC — limits total transaction duration

For detailed examples and code samples, consult references/postgresql-17.md .

PostgreSQL 18 (Sep 2025)

Virtual Generated Columns (Major)

Generated columns are now virtual by default (computed at read time, no disk storage). Use STORED for write-time storage.

CREATE TABLE t (a int, b int, total int GENERATED ALWAYS AS (a + b)); -- virtual (PG18 default) CREATE TABLE t (a int, b int, total int GENERATED ALWAYS AS (a + b) STORED); -- stored (PG16-17 behavior)

OLD/NEW in RETURNING (Major)

UPDATE t SET val = val + 1 RETURNING old.val AS before, new.val AS after; DELETE FROM t WHERE id = 1 RETURNING old.; MERGE INTO t USING s ON t.id = s.id ... RETURNING merge_action(), old., new.*;

Temporal Constraints (WITHOUT OVERLAPS)

Feature Syntax

Temporal PK PRIMARY KEY (id, range_col WITHOUT OVERLAPS)

Temporal UNIQUE UNIQUE (id, range_col WITHOUT OVERLAPS)

Temporal FK FOREIGN KEY (id, PERIOD range_col) REFERENCES parent (id, PERIOD range_col)

Requires btree_gist extension.

NOT ENFORCED Constraints

ALTER TABLE t ADD CHECK (val > 0) NOT ENFORCED; ALTER TABLE t ADD FOREIGN KEY (x) REFERENCES r NOT ENFORCED;

New Functions

Function Purpose Example

uuidv7()

Timestamp-ordered UUID SELECT uuidv7()

casefold(text)

Unicode case folding casefold('Straße') = casefold('STRASSE')

array_sort(anyarray)

Sort array array_sort(ARRAY[3,1,2]) → {1,2,3}

array_reverse(anyarray)

Reverse array array_reverse(ARRAY[1,2,3]) → {3,2,1}

crc32(bytea)

CRC32 checksum crc32('hello'::bytea)

crc32c(bytea)

CRC32C checksum crc32c('hello'::bytea)

Data Type Changes

  • jsonb null casting: ('null'::jsonb)::int → NULL (was error pre-18)

  • Integer ↔ bytea casting: 255::int2::bytea → \x00ff , '\x00ff'::bytea::int2 → 255

  • json{b}_strip_nulls(json, strip_in_arrays) — optional array null stripping

New SQL Syntax

Feature Syntax

COPY reject limit COPY t FROM file WITH (ON_ERROR ignore, REJECT_LIMIT 100)

VACUUM only parent VACUUM (ONLY) partitioned_table

ANALYZE only parent ANALYZE (ONLY) partitioned_table

Breaking Changes

  • EXPLAIN ANALYZE now auto-includes BUFFERS output

  • initdb enables data checksums by default (--no-data-checksums to disable)

  • COPY FROM CSV no longer treats . as EOF marker

  • Generated columns default to virtual (not stored)

  • NOT NULL constraints now in pg_constraint , can have names

For detailed examples and code samples, consult references/postgresql-18.md .

Reference Files

For extended documentation with full code examples:

  • references/postgresql-17.md — JSON_TABLE, SQL/JSON functions, MERGE, COPY ON_ERROR, and more with detailed usage examples

  • references/postgresql-18.md — Virtual generated columns, OLD/NEW in RETURNING, temporal constraints, NOT ENFORCED constraints, and more with detailed usage examples

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Research

dioxus-knowledge-patch

No summary provided by upstream source.

Repository SourceNeeds Review
Research

rust-knowledge-patch

No summary provided by upstream source.

Repository SourceNeeds Review
Research

postgis-knowledge-patch

No summary provided by upstream source.

Repository SourceNeeds Review