Skip to content

Rules#

There are 115 rules, all enabled by default except deprecated ones, which are not part of the active rule set.

Rules are divided into 8 categories:

  1. constraint: Rules for constraints
  2. general: Rules for best practices
  3. query: Rules for queries
  4. naming: Rules for naming
  5. schema: Rules for schema
  6. security: Rules for security
  7. typing: Rules for typing
  8. unsafe: Rules for unsafe schema migrations

constraint (CT)#

Code Name Status Auto-fixable
CT001 cascade-update ✅ Stable ✅
CT002 cascade-delete ✅ Stable ✅
CT003 identity-generated-by-default ✅ Stable ✅
CT004 remove-constraint ✅ Stable ❌
CT005 duplicate-primary-key-column ✅ Stable ✅
CT006 duplicate-unique-key-column ✅ Stable ✅

general (GN)#

Code Name Status Auto-fixable
GN001 table-inheritance ✅ Stable ❌
GN002 create-rule ✅ Stable ❌
GN003 sql-ascii-encoding ✅ Stable ✅
GN004 missing-primary-key ✅ Stable ❌
GN005 index-elements-more-than-three ✅ Stable ❌
GN006 create-enum ✅ Stable ❌
GN007 missing-replace-in-function ✅ Stable ✅
GN008 missing-replace-in-procedure ✅ Stable ✅
GN009 duplicate-column ✅ Stable ❌
GN010 table-column-conflict ✅ Stable ❌
GN011 missing-required-column ✅ Stable ✅
GN012 required-column-removal ✅ Stable ❌
GN013 nullable-required-column ✅ Stable ✅
GN014 select-into ✅ Stable ✅
GN015 drop-cascade ✅ Stable ✅
GN016 constant-generated-column ✅ Stable ❌
GN017 id-column ✅ Stable ✅
GN018 multi-column-partitioning ✅ Stable ❌
GN019 unlogged-table ✅ Stable ✅
GN020 current-time ✅ Stable ✅
GN021 null-constraint ✅ Stable ✅
GN022 update-without-where-clause ✅ Stable ❌
GN023 delete-without-where-clause ✅ Stable ❌
GN024 null-comparison ✅ Stable ✅
GN025 duplicate-index ✅ Stable ❌
GN026 not-in ✅ Stable ❌
GN027 yoda-condition ✅ Stable ✅
GN028 asterisk ✅ Stable ❌
GN029 missing-replace-in-view ✅ Stable ✅
GN030 missing-replace-in-trigger ✅ Stable ✅
GN031 stringified-null ✅ Stable ✅
GN032 duplicate-index-column ✅ Stable ✅
GN033 insert-without-target-columns ✅ Stable ❌
GN034 typed-table ✅ Stable ❌
GN035 inline-sql-function-body-wrong-language ✅ Stable ✅
GN036 self-assigning-column ✅ Stable ❌

query (QY)#

Code Name Status Auto-fixable
QY001 ordinal-number-group-by ✅ Stable ❌
QY002 ordinal-number-order-by ✅ Stable ❌

naming (NM)#

Code Name Status Auto-fixable
NM001 invalid-index-name ✅ Stable ❌
NM002 invalid-primary-key-name ✅ Stable ❌
NM003 invalid-unique-key-name ✅ Stable ❌
NM004 invalid-foreign-key-name ✅ Stable ❌
NM005 invalid-check-constraint-name ✅ Stable ❌
NM006 invalid-exclusion-constraint-name ✅ Stable ❌
NM007 invalid-sequence-name ✅ Stable ❌
NM008 implicit-constraint-name ✅ Stable ❌
NM009 invalid-partition-name ✅ Stable ❌
NM010 non-snake-case-identifier ✅ Stable ❌
NM011 keyword-identifier ✅ Stable ❌
NM012 special-character-in-identifier ✅ Stable ❌
NM013 pg-prefix-identifier ✅ Stable ❌
NM014 single-letter-identifier ✅ Stable ❌
NM015 timestamp-column-without-suffix ✅ Stable ✅
NM016 date-column-without-suffix ✅ Stable ✅

schema (SM)#

Code Name Status Auto-fixable
SM001 schema-unqualified-object ✅ Stable ❌
SM002 disallowed-schema ✅ Stable ✅

security (ST)#

Code Name Status Auto-fixable
ST001 extension-whitelist ✅ Stable ❌
ST002 procedural-language-whitelist ✅ Stable ❌
ST003 security-definer-function-no-explicit-search-path ✅ Stable ✅
ST004 security-definer-function-temp-schema-order ✅ Stable ✅
ST005 security-definer-function-non-temp-schema ✅ Stable ✅

typing (TP)#

Code Name Status Auto-fixable
TP001 timestamp-without-timezone ✅ Stable ✅
TP002 time-with-time-zone ✅ Stable ✅
TP003 timestamp-with-timezone-with-precision ✅ Stable ✅
TP004 char ✅ Stable ✅
TP005 varchar ✅ Stable ✅
TP006 money ✅ Stable ✅
TP007 serial ✅ Stable ✅
TP008 json ✅ Stable ✅
TP009 integer ✅ Stable ✅
TP010 smallint ✅ Stable ✅
TP011 float ✅ Stable ✅
TP012 xml ✅ Stable ✅
TP013 hstore ✅ Stable ✅
TP014 disallowed-data-type ✅ Stable ✅
TP015 wrongly-typed-required-column ✅ Stable ✅
TP016 numeric-with-precision ✅ Stable ✅
TP017 nullable-boolean-field ✅ Stable ✅

unsafe (US)#

Code Name Status Auto-fixable
US001 drop-column ✅ Stable ❌
US002 column-data-type-change ✅ Stable ❌
US003 column-rename ✅ Stable ❌
US004 adding-auto-increment-column ✅ Stable ❌
US005 adding-auto-increment-identity-column ✅ Stable ❌
US006 adding-stored-generated-column ✅ Stable ❌
US007 drop-tablespace ✅ Stable ❌
US008 drop-database ✅ Stable ❌
US009 drop-schema ✅ Stable ❌
US010 not-null-constraint-on-existing-column ✅ Stable ❌
US011 new-not-null-column-with-volatile-default ⚠ Deprecated ❌
US012 validating-foreign-key-constraint-on-existing-rows ✅ Stable ✅
US013 validating-check-constraint-on-existing-rows ✅ Stable ✅
US014 unique-key-constraint-creating-index ✅ Stable ❌
US015 primary-key-constraint-creating-index ✅ Stable ❌
US016 non-concurrent-index-creation ✅ Stable ✅
US017 index-movement-to-tablespace ✅ Stable ❌
US018 indexes-movement-to-tablespace ✅ Stable ❌
US019 non-concurrent-index-drop ✅ Stable ✅
US020 non-concurrent-reindex ✅ Stable ✅
US021 drop-table ✅ Stable ❌
US022 rename-table ✅ Stable ❌
US023 table-movement-to-tablespace ✅ Stable ❌
US024 tables-movement-to-tablespace ✅ Stable ❌
US025 cluster ✅ Stable ❌
US026 vacuum-full ✅ Stable ❌
US027 non-concurrent-detach-partition ✅ Stable ✅
US028 non-concurrent-refresh-materialized-view ✅ Stable ✅
US029 truncate-table ✅ Stable ❌
US030 mismatch-column-in-data-type-change ✅ Stable ❌
US031 new-column-with-volatile-default ✅ Stable ❌