Skip to content
pglinter

pglinter

pglinter : PostgreSQL Linting and Analysis Extension

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
5090
pglinter
pglinter
1.1.2
ADMIN
PostgreSQL
Rust
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-dt-
No
Yes
No
Yes
no
yes
Relationships
See Also
amcheck
supautils

manually upgraded PGRX from 0.16.1 to 0.17.0 by Vonng

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PIGSTY
1.1.2
18
17
16
15
14
pglinter-
RPM
PIGSTY
1.1.2
18
17
16
15
14
pglinter_$v-
DEB
PIGSTY
1.1.2
18
17
16
15
14
postgresql-$v-pglinter-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
el8.aarch64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
el9.x86_64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
el9.aarch64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
el10.x86_64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
el10.aarch64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
d12.x86_64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
d12.aarch64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
d13.x86_64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
d13.aarch64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
u22.x86_64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
u22.aarch64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
u24.x86_64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
u24.aarch64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
u26.x86_64
MISS
MISS
MISS
MISS
MISS
u26.aarch64
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PIGSTY 1.1.2
PackageVersionOSORGSIZEFile URL
pglinter_181.1.2el8.x86_64pigsty587.9 KiBpglinter_18-1.1.2-1PIGSTY.el8.x86_64.rpm
pglinter_181.1.2el8.aarch64pigsty449.1 KiBpglinter_18-1.1.2-1PIGSTY.el8.aarch64.rpm
pglinter_181.1.2el9.x86_64pigsty601.7 KiBpglinter_18-1.1.2-1PIGSTY.el9.x86_64.rpm
pglinter_181.1.2el9.aarch64pigsty477.2 KiBpglinter_18-1.1.2-1PIGSTY.el9.aarch64.rpm
pglinter_181.1.2el10.x86_64pigsty601.5 KiBpglinter_18-1.1.2-1PIGSTY.el10.x86_64.rpm
pglinter_181.1.2el10.aarch64pigsty476.6 KiBpglinter_18-1.1.2-1PIGSTY.el10.aarch64.rpm
postgresql-18-pglinter1.1.2d12.x86_64pigsty496.2 KiBpostgresql-18-pglinter_1.1.2-1PIGSTY~bookworm_amd64.deb
postgresql-18-pglinter1.1.2d12.aarch64pigsty364.7 KiBpostgresql-18-pglinter_1.1.2-1PIGSTY~bookworm_arm64.deb
postgresql-18-pglinter1.1.2d13.x86_64pigsty496.2 KiBpostgresql-18-pglinter_1.1.2-1PIGSTY~trixie_amd64.deb
postgresql-18-pglinter1.1.2d13.aarch64pigsty364.5 KiBpostgresql-18-pglinter_1.1.2-1PIGSTY~trixie_arm64.deb
postgresql-18-pglinter1.1.2u22.x86_64pigsty549.8 KiBpostgresql-18-pglinter_1.1.2-1PIGSTY~jammy_amd64.deb
postgresql-18-pglinter1.1.2u22.aarch64pigsty424.9 KiBpostgresql-18-pglinter_1.1.2-1PIGSTY~jammy_arm64.deb
postgresql-18-pglinter1.1.2u24.x86_64pigsty545.0 KiBpostgresql-18-pglinter_1.1.2-1PIGSTY~noble_amd64.deb
postgresql-18-pglinter1.1.2u24.aarch64pigsty418.6 KiBpostgresql-18-pglinter_1.1.2-1PIGSTY~noble_arm64.deb
postgresql-18-pglinter1.1.2u26.aarch64pigsty471.6 KiBpostgresql-18-pglinter_1.1.2-2PIGSTY~resolute_arm64.deb

Source

pig build pkg pglinter;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install pglinter;		# install via package name, for the active PG version

pig install pglinter -v 18;   # install for PG 18
pig install pglinter -v 17;   # install for PG 17
pig install pglinter -v 16;   # install for PG 16
pig install pglinter -v 15;   # install for PG 15
pig install pglinter -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION pglinter;

Usage

pglinter analyzes a PostgreSQL database for potential issues, performance problems, and best practice violations. Current user docs expose findings through pglinter.get_violations(), which returns enabled-rule violations as rows that can be filtered or joined to pg_identify_object().

Run Checks

SELECT * FROM pglinter.get_violations();
SELECT * FROM pglinter.get_violations() WHERE rule_code = 'B001';

SELECT
  rule_code,
  (pg_identify_object(classid, objid, objsubid)).type AS object_type,
  (pg_identify_object(classid, objid, objsubid)).schema AS object_schema,
  (pg_identify_object(classid, objid, objsubid)).name AS object_name,
  (pg_identify_object(classid, objid, objsubid)).identity AS object_identity
FROM pglinter.get_violations();

Rule Management

SELECT pglinter.show_rules();                -- Show all rules and their status
SELECT pglinter.explain_rule('B001');        -- Get rule details and suggested fixes
SELECT pglinter.enable_rule('B001');         -- Enable a specific rule
SELECT pglinter.disable_rule('B001');        -- Disable a specific rule
SELECT pglinter.is_rule_enabled('B001');     -- Check if a rule is enabled
SELECT pglinter.enable_all_rules();
SELECT pglinter.disable_all_rules();
SELECT pglinter.show_rule_queries('B001');   -- Inspect the rule query
SELECT pglinter.list_rules();                -- Return a formatted rule list

Rule Import And Export

SELECT pglinter.export_rules_to_yaml();                -- Export rules to YAML
SELECT pglinter.import_rules_from_yaml('yaml...');     -- Import rules from YAML
SELECT pglinter.export_rules_to_file('/path/to/rules.yaml');
SELECT pglinter.import_rules_from_file('/path/to/rules.yaml');
SELECT pglinter.export_rulemessages_to_yaml();
SELECT pglinter.import_rule_messages_from_yaml('yaml...');

Rule Families

Base (B-series): B001 tables without PK, B002 redundant indexes, B003 missing FK indexes, B004 unused indexes, B005 uppercase names, B006 unused tables, B007 cross-schema FKs, B008 FK type mismatches, B009 shared trigger functions, B010 reserved keywords, B011 multiple owners per schema, B012 composite primary keys with more than four columns, B013 row-by-row trigger processing without a WHERE clause.

Cluster (C-series): C002 insecure pg_hba.conf entries, C003 MD5 password encryption.

Schema (S-series): S001 no default role grants, S002 env prefixes/suffixes, S003 unsecured public schema, S004 system role ownership, S005 multiple owners per schema.

Caveats

Pigsty package metadata is version 1.1.2 for PostgreSQL 14-18 and notes a local PGRX upgrade from 0.16.1 to 0.17.0. Upstream README compatibility text still says PostgreSQL 13-18 and PGRX 0.16.1.

The upstream 1.1.2 release adds B013. The main README remains partially stale compared with the docs and exported functions, so this stub uses get_violations() and omits older unconfirmed check()/check_rule() examples.

Last updated on