Rules
Below the list of rules supported by the Postgres Language Server, divided by group. Here's a legend of the emojis:
- The icon ✅ indicates that the rule is part of the recommended rules.
Safety
Rules that detect potential safety issues in your code.
Rule name | Description | Properties |
---|---|---|
addingFieldWithDefault | Adding a column with a DEFAULT value may lead to a table rewrite while holding an ACCESS EXCLUSIVE lock. | ✅ |
addingForeignKeyConstraint | Adding a foreign key constraint requires a table scan and a SHARE ROW EXCLUSIVE lock on both tables, which blocks writes. | ✅ |
addingNotNullField | Setting a column NOT NULL blocks reads while the table is scanned. | ✅ |
addingPrimaryKeyConstraint | Adding a primary key constraint results in locks and table rewrites. | ✅ |
addingRequiredField | Adding a new column that is NOT NULL and has no default value to an existing table effectively makes it required. | |
banCharField | Using CHAR(n) or CHARACTER(n) types is discouraged. | |
banConcurrentIndexCreationInTransaction | Concurrent index creation is not allowed within a transaction. | ✅ |
banDropColumn | Dropping a column may break existing clients. | ✅ |
banDropDatabase | Dropping a database may break existing clients (and everything else, really). | |
banDropNotNull | Dropping a NOT NULL constraint may break existing clients. | ✅ |
banDropTable | Dropping a table may break existing clients. | ✅ |
banTruncateCascade | Using TRUNCATE 's CASCADE option will truncate any tables that are also foreign-keyed to the specified tables. |
|
changingColumnType | Changing a column type may break existing clients. | |
constraintMissingNotValid | Adding constraints without NOT VALID blocks all reads and writes. | |
disallowUniqueConstraint | Disallow adding a UNIQUE constraint without using an existing index. | |
preferBigInt | Prefer BIGINT over smaller integer types. | |
preferBigintOverInt | Prefer BIGINT over INT/INTEGER types. | |
preferBigintOverSmallint | Prefer BIGINT over SMALLINT types. | |
preferIdentity | Prefer using IDENTITY columns over serial columns. | |
preferJsonb | Prefer JSONB over JSON types. | |
preferRobustStmts | Prefer statements with guards for robustness in migrations. | |
preferTextField | Prefer using TEXT over VARCHAR(n) types. | |
preferTimestamptz | Prefer TIMESTAMPTZ over TIMESTAMP types. | |
renamingColumn | Renaming columns may break existing queries and application code. | |
renamingTable | Renaming tables may break existing queries and application code. | |
requireConcurrentIndexCreation | Creating indexes non-concurrently can lock the table for writes. | |
requireConcurrentIndexDeletion | Dropping indexes non-concurrently can lock the table for reads. | |
transactionNesting | Detects problematic transaction nesting that could lead to unexpected behavior. |