PgDesigner validates your schema against 69 built-in lint rules grouped into three severity levels.
Errors mark an invalid model — broken references, duplicates, constructs PostgreSQL rejects; pgdesigner lint exits with code 1 when it finds one, so they fail CI. Warnings indicate valid but likely
problematic constructs. Info rules are suggestions for best practices. Rules marked
as fixable can be resolved automatically using the autofix action.
33 rules — the model is invalid; lint exits with code 1.
| Code | Description | Fixable |
|---|---|---|
| E001 | object has an empty name | — |
| E002 | identifier exceeds 63 chars | — |
| E003 | duplicate table in schema | — |
| E004 | duplicate column in table | — |
| E005 | duplicate index name in schema | — |
| E006 | duplicate constraint name in table | — |
| E007 | PK references unknown column | — |
| E008 | FK references unknown local column | — |
| E009 | FK references unknown table | — |
| E010 | FK references unknown target column | — |
| E011 | index references unknown column | — |
| E012 | index references unknown table | — |
| E013 | UNIQUE references unknown column | — |
| E014 | enum has no labels | — |
| E015 | duplicate enum label | — |
| E016 | composite type has no fields | — |
| E017 | table has no columns | — |
| E018 | unknown data type | — |
| E019 | INCLUDE references unknown column | — |
| E020 | duplicate schema name | — |
| E021 | FK has no columns | — |
| E022 | partition key references unknown column | — |
| E023 | trigger references unknown table | — |
| E024 | policy references unknown table | — |
| E025 | invalid sequence type | — |
| E026 | EXCLUDE references unknown column | — |
| E027 | domain base type unknown | — |
| E028 | function has no body | — |
| E029 | function has no language | — |
| E030 | view has no query | — |
| E031 | table has multiple identity columns (PG allows only one) | — |
| E032 | PK/UNIQUE must include all partition key columns | — |
| E033 | generated column has an empty expression attribute | — |
23 rules — DDL is valid but a problem likely exists.
| Code | Description | Fixable |
|---|---|---|
| W001 | FK column type mismatch | — |
| W002 | FK columns have no matching index | Yes |
| W003 | circular FK dependency | — |
| W004 | table has no primary key | Yes |
| W005 | duplicate index columns | Yes |
| W007 | naming convention violation | — |
| W008 | partitioned table has no children | — |
| W009 | orphan partition | — |
| W010 | identity column has default | Yes |
| W011 | generated column has default | Yes |
| W012 | PK column is nullable | Yes |
| W013 | sequence has no owned-by | — |
| W014 | layout references unknown table | — |
| W015 | FK uses NO ACTION default | Yes |
| W016 | FK to non-unique column | — |
| W017 | overlapping index (prefix) | Yes |
| W018 | duplicate FK | Yes |
| W019 | self-referencing FK with NOT NULL | — |
| W020 | reserved word as identifier | — |
| W021 | feature requires newer PostgreSQL version | — |
| W022 | partition bound overlaps with sibling | — |
| W023 | index expression holds several comma-separated keys | — |
| W024 | column type is defined only in a non-public schema and is written without it | — |
13 rules — suggestions for best practices.
| Code | Description | Fixable |
|---|---|---|
| I001 | prefer text over char(n) | Yes |
| I003 | prefer numeric over money | Yes |
| I004 | prefer identity over serial | Yes |
| I005 | prefer timestamptz | Yes |
| I006 | timetz is rarely useful | Yes |
| I007 | prefer triggers over rules | — |
| I009 | prefer jsonb over json | Yes |
| I012 | text/varchar PK | — |
| I013 | too many indexes (>10) | — |
| I016 | index on boolean column | — |
| I017 | PK column does not follow <singularTable>Id convention | — |
| I018 | table name does not match plural/singular convention | — |
| I019 | partitioned table has more than 100 partitions | — |