PgDesigner validates your schema against 75 built-in lint rules grouped into three severity levels. Errors block DDL generation. 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.
32 rules — block DDL generation.
| 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 | — |
21 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 | — |
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 | — |