Package liquibase.database.core
Class PostgresDatabase
- java.lang.Object
-
- liquibase.database.AbstractJdbcDatabase
-
- liquibase.database.core.PostgresDatabase
-
- All Implemented Interfaces:
AutoCloseable,Database,PrioritizedService
- Direct Known Subclasses:
CockroachDatabase,EnterpriseDBDatabase
public class PostgresDatabase extends AbstractJdbcDatabase
Encapsulates PostgreSQL database support.
-
-
Field Summary
Fields Modifier and Type Field Description static intMINIMUM_DBMS_MAJOR_VERSIONstatic intMINIMUM_DBMS_MINOR_VERSIONstatic StringPRODUCT_NAMEstatic List<String>VALID_AUTO_INCREMENT_COLUMN_TYPE_NAMESThe data type names which are valid for auto-increment columns.-
Fields inherited from class liquibase.database.AbstractJdbcDatabase
caseSensitive, currentDateTimeFunction, dateFunctions, defaultAutoIncrementBy, defaultAutoIncrementStartWith, defaultCatalogName, defaultSchemaName, quotingStrategy, sequenceCurrentValueFunction, sequenceNextValueFunction, unmodifiableDataTypes, unquotedObjectsAreUppercased
-
Fields inherited from interface liquibase.servicelocator.PrioritizedService
COMPARATOR, PRIORITY_DATABASE, PRIORITY_DEFAULT
-
-
Constructor Summary
Constructors Constructor Description PostgresDatabase()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description StringcorrectObjectName(String objectName, Class<? extends DatabaseObject> objectType)Fix the object name to the format the database expects, handling changes in case, etc.booleanequals(Object o)StringescapeObjectName(String objectName, Class<? extends DatabaseObject> objectType)This has special case logic to handle NOT quoting column names if they are of type 'LiquibaseColumn' - columns in the DATABASECHANGELOG or DATABASECHANGELOGLOCK tables.booleangenerateAutoIncrementBy(BigInteger incrementBy)booleangenerateAutoIncrementStartWith(BigInteger startWith)StringgeneratePrimaryKeyName(String tableName)Generates PK followingPostgreSQLconventions: Postgres PK size is limited with 63 bytes.StringgetAutoIncrementClause()protected StringgetAutoIncrementClause(String generationType, Boolean defaultOnNull)Default implementation.protected SqlStatementgetConnectionSchemaNameCallStatement()Used to obtain the connection schema name through a statement Override this method to change the statement.StringgetDatabaseChangeLogLockTableName()StringgetDatabaseChangeLogTableName()protected StringgetDefaultDatabaseProductName()StringgetDefaultDriver(String url)If this database understands the given url, return the default driver class name.IntegergetDefaultPort()intgetMaxFractionalDigitsForTimestamp()Most relational databases support 9 fractional digits, and subclasses must overwrite this method if they support less than that.intgetPriority()CatalogAndSchema.CatalogAndSchemaCasegetSchemaAndCatalogCase()This logic is used when db support catalogsStringgetShortName()Returns an all-lower-case short name of the product.Set<String>getSystemViews()Returns system (undroppable) views.inthashCode()protected booleanhasMixedCase(String tableName)booleanisCorrectDatabaseImplementation(DatabaseConnection conn)Is this AbstractDatabase subclass the correct one to use for the given connection.booleanisReservedWord(String tableName)booleanisSystemObject(DatabaseObject example)voidrollback()voidsetConnection(DatabaseConnection conn)voidsetDefaultCatalogName(String defaultCatalogName)booleansupportsCatalogInObjectName(Class<? extends DatabaseObject> type)booleansupportsInitiallyDeferrableColumns()Returns whether this database support initially deferrable columns.booleansupportsSequences()Does the database type support sequence.booleansupportsTablespaces()StringunescapeDataTypeName(String dataTypeName)booleanuseSerialDatatypes()Should the database use "serial" datatypes vs.-
Methods inherited from class liquibase.database.AbstractJdbcDatabase
addReservedWords, canCreateChangeLogTable, close, commit, correctSchema, correctSchema, createsIndexesForForeignKeys, dataTypeIsNotModifiable, disableForeignKeyChecks, doesTagExist, dropDatabaseObjects, enableForeignKeyChecks, escapeColumnName, escapeColumnName, escapeColumnNameList, escapeConstraintName, escapeDataTypeName, escapeIndexName, escapeObjectName, escapeSequenceName, escapeStringForDatabase, escapeTableName, escapeViewName, execute, executeRollbackStatements, executeRollbackStatements, executeStatements, filterRollbackVisitors, generateDatabaseFunctionValue, get, getAutoCommitMode, getAutoIncrementByClause, getAutoIncrementClause, getAutoIncrementClosing, getAutoIncrementOpening, getAutoIncrementStartWithClause, getConcatSql, getConnection, getConnectionCatalogName, getConnectionSchemaName, getContainingObjects, getCurrentDateTimeFunction, getDatabaseMajorVersion, getDatabaseMinorVersion, getDatabaseProductName, getDatabaseProductVersion, getDataTypeMaxParameters, getDateFunctions, getDateLiteral, getDateLiteral, getDateLiteral, getDateTimeLiteral, getDefaultCatalogName, getDefaultFractionalDigitsForTimestamp, getDefaultScaleForNativeDataType, getDefaultSchema, getDefaultSchemaName, getFetchSize, getJdbcCatalogName, getJdbcCatalogName, getJdbcSchemaName, getJdbcSchemaName, getLineComment, getLiquibaseCatalogName, getLiquibaseSchemaName, getLiquibaseTablespaceName, getName, getObjectQuotingStrategy, getOutputDefaultCatalog, getOutputDefaultSchema, getQuotingEndCharacter, getQuotingEndReplacement, getQuotingStartCharacter, getRanChangeSet, getRanChangeSetList, getRanDate, getRunStatus, getSchemaFromJdbcInfo, getSystemSchema, getSystemTables, getTimeLiteral, getViewDefinition, isAutoCommit, isCaseSensitive, isCurrentTimeFunction, isDateOnly, isDateTime, isDefaultCatalog, isDefaultSchema, isFunction, isLiquibaseObject, isSafeToRunUpdate, isSystemView, isTimeOnly, isTimestamp, jdbcCallsCatalogsSchemas, markChangeSetExecStatus, mustQuoteObjectName, parseDate, quoteObject, removeRanStatus, requiresExplicitNullForColumns, requiresPassword, requiresUsername, resetInternalState, saveRollbackStatement, saveStatements, set, setAutoCommit, setCanCacheLiquibaseTableInfo, setCaseSensitive, setCurrentDateTimeFunction, setDatabaseChangeLogLockTableName, setDatabaseChangeLogTableName, setDefaultSchemaName, setLiquibaseCatalogName, setLiquibaseSchemaName, setLiquibaseTablespaceName, setObjectQuotingStrategy, setOutputDefaultCatalog, setOutputDefaultSchema, startsWithNumeric, supportsAutoIncrement, supportsBatchUpdates, supportsCatalogs, supportsDDLInTransaction, supportsDropTableCascadeConstraints, supportsForeignKeyDisable, supportsNotNullConstraintNames, supportsPrimaryKeyNames, supportsRestrictForeignKeys, supportsSchemas, tag, toString, unescapeDataTypeString, validate
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface liquibase.database.Database
getDisplayName
-
-
-
-
Field Detail
-
PRODUCT_NAME
public static final String PRODUCT_NAME
- See Also:
- Constant Field Values
-
MINIMUM_DBMS_MAJOR_VERSION
public static final int MINIMUM_DBMS_MAJOR_VERSION
- See Also:
- Constant Field Values
-
MINIMUM_DBMS_MINOR_VERSION
public static final int MINIMUM_DBMS_MINOR_VERSION
- See Also:
- Constant Field Values
-
-
Method Detail
-
equals
public boolean equals(Object o)
- Overrides:
equalsin classAbstractJdbcDatabase
-
hashCode
public int hashCode()
- Overrides:
hashCodein classAbstractJdbcDatabase
-
getShortName
public String getShortName()
Description copied from interface:DatabaseReturns an all-lower-case short name of the product. Used for end-user selecting of database type such as the DBMS precondition.
-
getDefaultDatabaseProductName
protected String getDefaultDatabaseProductName()
- Specified by:
getDefaultDatabaseProductNamein classAbstractJdbcDatabase
-
getDefaultPort
public Integer getDefaultPort()
-
getSystemViews
public Set<String> getSystemViews()
Description copied from class:AbstractJdbcDatabaseReturns system (undroppable) views.- Overrides:
getSystemViewsin classAbstractJdbcDatabase
-
getPriority
public int getPriority()
-
supportsInitiallyDeferrableColumns
public boolean supportsInitiallyDeferrableColumns()
Description copied from interface:DatabaseReturns whether this database support initially deferrable columns.
-
isCorrectDatabaseImplementation
public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException
Description copied from interface:DatabaseIs this AbstractDatabase subclass the correct one to use for the given connection.- Throws:
DatabaseException
-
getDefaultDriver
public String getDefaultDriver(String url)
Description copied from interface:DatabaseIf this database understands the given url, return the default driver class name. Otherwise return null.
-
supportsCatalogInObjectName
public boolean supportsCatalogInObjectName(Class<? extends DatabaseObject> type)
- Specified by:
supportsCatalogInObjectNamein interfaceDatabase- Overrides:
supportsCatalogInObjectNamein classAbstractJdbcDatabase
-
supportsSequences
public boolean supportsSequences()
Description copied from class:AbstractJdbcDatabaseDoes the database type support sequence.- Specified by:
supportsSequencesin interfaceDatabase- Overrides:
supportsSequencesin classAbstractJdbcDatabase
-
getDatabaseChangeLogTableName
public String getDatabaseChangeLogTableName()
- Specified by:
getDatabaseChangeLogTableNamein interfaceDatabase- Overrides:
getDatabaseChangeLogTableNamein classAbstractJdbcDatabase
-
getDatabaseChangeLogLockTableName
public String getDatabaseChangeLogLockTableName()
- Specified by:
getDatabaseChangeLogLockTableNamein interfaceDatabase- Overrides:
getDatabaseChangeLogLockTableNamein classAbstractJdbcDatabase
-
setConnection
public void setConnection(DatabaseConnection conn)
- Specified by:
setConnectionin interfaceDatabase- Overrides:
setConnectionin classAbstractJdbcDatabase
-
unescapeDataTypeName
public String unescapeDataTypeName(String dataTypeName)
- Specified by:
unescapeDataTypeNamein interfaceDatabase- Overrides:
unescapeDataTypeNamein classAbstractJdbcDatabase
-
isSystemObject
public boolean isSystemObject(DatabaseObject example)
- Specified by:
isSystemObjectin interfaceDatabase- Overrides:
isSystemObjectin classAbstractJdbcDatabase
-
supportsTablespaces
public boolean supportsTablespaces()
-
getAutoIncrementClause
public String getAutoIncrementClause()
- Overrides:
getAutoIncrementClausein classAbstractJdbcDatabase
-
useSerialDatatypes
public boolean useSerialDatatypes()
Should the database use "serial" datatypes vs. "generated by default as identity"
-
getAutoIncrementClause
protected String getAutoIncrementClause(String generationType, Boolean defaultOnNull)
Description copied from class:AbstractJdbcDatabaseDefault implementation. Intended for override in database specific cases- Overrides:
getAutoIncrementClausein classAbstractJdbcDatabase
-
generateAutoIncrementStartWith
public boolean generateAutoIncrementStartWith(BigInteger startWith)
- Overrides:
generateAutoIncrementStartWithin classAbstractJdbcDatabase
-
generateAutoIncrementBy
public boolean generateAutoIncrementBy(BigInteger incrementBy)
- Overrides:
generateAutoIncrementByin classAbstractJdbcDatabase
-
escapeObjectName
public String escapeObjectName(String objectName, Class<? extends DatabaseObject> objectType)
This has special case logic to handle NOT quoting column names if they are of type 'LiquibaseColumn' - columns in the DATABASECHANGELOG or DATABASECHANGELOGLOCK tables.- Specified by:
escapeObjectNamein interfaceDatabase- Overrides:
escapeObjectNamein classAbstractJdbcDatabase
-
correctObjectName
public String correctObjectName(String objectName, Class<? extends DatabaseObject> objectType)
Description copied from interface:DatabaseFix the object name to the format the database expects, handling changes in case, etc.- Specified by:
correctObjectNamein interfaceDatabase- Overrides:
correctObjectNamein classAbstractJdbcDatabase
-
hasMixedCase
protected boolean hasMixedCase(String tableName)
-
isReservedWord
public boolean isReservedWord(String tableName)
- Specified by:
isReservedWordin interfaceDatabase- Overrides:
isReservedWordin classAbstractJdbcDatabase
-
getConnectionSchemaNameCallStatement
protected SqlStatement getConnectionSchemaNameCallStatement()
Description copied from class:AbstractJdbcDatabaseUsed to obtain the connection schema name through a statement Override this method to change the statement. Only override this if getConnectionSchemaName is left unchanges or is using this method.- Overrides:
getConnectionSchemaNameCallStatementin classAbstractJdbcDatabase- See Also:
AbstractJdbcDatabase.getConnectionSchemaName()
-
generatePrimaryKeyName
public String generatePrimaryKeyName(String tableName)
Generates PK followingPostgreSQLconventions:- Postgres PK size is limited with 63 bytes.
- Postgres PK is suffixed with '_pkey'.
- Specified by:
generatePrimaryKeyNamein interfaceDatabase- Overrides:
generatePrimaryKeyNamein classAbstractJdbcDatabase- Parameters:
tableName- Table name as the base name for the generated PK.- Returns:
- PK name.
-
getMaxFractionalDigitsForTimestamp
public int getMaxFractionalDigitsForTimestamp()
Description copied from class:AbstractJdbcDatabaseMost relational databases support 9 fractional digits, and subclasses must overwrite this method if they support less than that.- Specified by:
getMaxFractionalDigitsForTimestampin interfaceDatabase- Overrides:
getMaxFractionalDigitsForTimestampin classAbstractJdbcDatabase- Returns:
- the maxmimum number of supported fractional digits in TIMESTAMP columns
-
getSchemaAndCatalogCase
public CatalogAndSchema.CatalogAndSchemaCase getSchemaAndCatalogCase()
Description copied from class:AbstractJdbcDatabaseThis logic is used when db support catalogs- Specified by:
getSchemaAndCatalogCasein interfaceDatabase- Overrides:
getSchemaAndCatalogCasein classAbstractJdbcDatabase- Returns:
- UPPER_CASE by default
-
rollback
public void rollback() throws DatabaseException- Specified by:
rollbackin interfaceDatabase- Overrides:
rollbackin classAbstractJdbcDatabase- Throws:
DatabaseException
-
setDefaultCatalogName
public void setDefaultCatalogName(String defaultCatalogName)
- Specified by:
setDefaultCatalogNamein interfaceDatabase- Overrides:
setDefaultCatalogNamein classAbstractJdbcDatabase
-
-