TablesMustHavePkOrBeNamedNpk
Last updated: September 2, 2025
TablesMustHavePkOrBeNamedNpk is a custom policy check that finds tables that have a Primary Key AND contain NPK in their name.
Before you begin
Scope | Database |
changelog | Relational |
Liquibase 4.29.0+
Configure a valid Liquibase Secure license key
Ensure the Liquibase Checks extension is installed. In Liquibase 4.31.0+, it is already installed in the
/liquibase/internal/lib
directory, so no action is needed.If the checks JAR is not installed, download liquibase-checks-<version>.jar and put it in the
liquibase/lib
directory.(Maven users only) Add the
liquibase-checks
dependency to yourpom.xml
file. See Add extensions with Maven for more information.Java Development Kit 17+ (available for Open JDK and Oracle JDK)
Linux, macOS, or Windows operating system
Procedure
These steps describe how to create the Custom Policy Check. It does not exist by default in Liquibase Secure.
Run this command in the CLI:
liquibase checks customize --check-name=SqlUserDefinedPatternCheck
Give your check a short name for easy identification
Use up to 64 alpha-numeric characters only.
TablesMustHaveCreateTableOnly
Set the Severity to return a code of 0-4 when triggered.
These severity codes allow you to determine if the job moves forward or stops when this check triggers.
Learn more here: Use Policy Checks in Automation: Severity and Exit Code
options: 'INFO'=0
, 'MINOR'=1
, 'MAJOR'=2
, 'CRITICAL'=3
, 'BLOCKER'=4
Set 'OPERATOR' (options: STARTS_WITH, ENDS_WITH, CONTAINS, REGEXP, EQUALS) [STARTS_WITH]:
CONTAINS
Set the SEARCH_STRING to this valid regular expression:
In this example we will use:
TablenameContainsNPK
TablesMustHavePkOrBeNamedNpk
TABLE
Set 'CASE_SENSITIVE' to true or false depending on how narrow you want your search to be.
In this example, we will set it to false
.
Enter this command into the CLI:
liquibase checks enable --check-name=ConstraintMustExist
Give your check a short name for easier identification
Use up to 64 alpha-numeric characters only.
[ConstraintMustExist1]:
TablesMustHavePK
Set the Severity to return a code of 0-4 when triggered.
Options: 'INFO'=0, 'MINOR'=1, 'MAJOR'=2, 'CRITICAL'=3, 'BLOCKER'=4
Set the CONSTRAINT_OPERATOR
Use up to 64 alpha-numeric characters only.
[ConstraintMustExist1]:
TablesMustHavePK
Enter the required constraint(s), separated by commas
Options: NOT_NULL, UNIQUE, PRIMARYKEY, FOREIGNKEY, DEFAULT
In this example, we will use:
[PRIMARYKEY]: PRIMARYKEY
Set 'CASE_SENSITIVE' to true or false depending on how narrow you want your search to be.
In this example, we will set it to true
.
Set the MESSAGE to match for regular expression <SEARCH_STRING> was detected in Changeset.
All tables must have primary key.
Enter this command into the CLI:
liquibase checks copy --check-name=ChainedChecksTemplate
Give your check a short name for easier identification.
In this example we will use:
TablesWithoutPKNamingStandard
Set the Severity to return a code of 0-4 when triggered.
Options: 'INFO'=0, 'MINOR'=1, 'MAJOR'=2, 'CRITICAL'=3, 'BLOCKER'=4
Enter the shortname, logic conditional (using &&, ||, !), and optional (groupings) for your checks.
Example: "(shortname1 && shortname2) || shortname3":
We will enter:
TablesMustHavePK && TablenameContainsNPK
Set 'MESSAGE' [A match for regular expression <SEARCH_STRING> was detected in Changeset .]:
Tables without primary keys must have npk in the table name