333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../../src/driver/postgres/PostgresQueryRunner.ts"],"names":[],"mappings":"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","file":"PostgresQueryRunner.js","sourcesContent":["import {PromiseUtils} from \"../../\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {TransactionAlreadyStartedError} from \"../../error/TransactionAlreadyStartedError\";\nimport {TransactionNotStartedError} from \"../../error/TransactionNotStartedError\";\nimport {ColumnType} from \"../../index\";\nimport {ReadStream} from \"../../platform/PlatformTools\";\nimport {BaseQueryRunner} from \"../../query-runner/BaseQueryRunner\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {TableIndexOptions} from \"../../schema-builder/options/TableIndexOptions\";\nimport {Table} from \"../../schema-builder/table/Table\";\nimport {TableCheck} from \"../../schema-builder/table/TableCheck\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {TableExclusion} from \"../../schema-builder/table/TableExclusion\";\nimport {TableForeignKey} from \"../../schema-builder/table/TableForeignKey\";\nimport {TableIndex} from \"../../schema-builder/table/TableIndex\";\nimport {TableUnique} from \"../../schema-builder/table/TableUnique\";\nimport {View} from \"../../schema-builder/view/View\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {Query} from \"../Query\";\nimport {IsolationLevel} from \"../types/IsolationLevel\";\nimport {PostgresDriver} from \"./PostgresDriver\";\n\n/**\n * Runs queries on a single postgres database connection.\n */\nexport class PostgresQueryRunner extends BaseQueryRunner implements QueryRunner {\n\n    // -------------------------------------------------------------------------\n    // Public Implemented Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Database driver used by connection.\n     */\n    driver: PostgresDriver;\n\n    // -------------------------------------------------------------------------\n    // Protected Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Promise used to obtain a database connection for a first time.\n     */\n    protected databaseConnectionPromise: Promise<any>;\n\n    /**\n     * Special callback provided by a driver used to release a created connection.\n     */\n    protected releaseCallback: Function;\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(driver: PostgresDriver, mode: \"master\"|\"slave\" = \"master\") {\n        super();\n        this.driver = driver;\n        this.connection = driver.connection;\n        this.mode = mode;\n        this.broadcaster = new Broadcaster(this);\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Creates/uses database connection from the connection pool to perform further operations.\n     * Returns obtained database connection.\n     */\n    connect(): Promise<any> {\n        if (this.databaseConnection)\n            return Promise.resolve(this.databaseConnection);\n\n        if (this.databaseConnectionPromise)\n            return this.databaseConnectionPromise;\n\n        if (this.mode === \"slave\" && this.driver.isReplicated)  {\n            this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(([ connection, release]: any[]) => {\n                this.driver.connectedQueryRunners.push(this);\n                this.databaseConnection = connection;\n                this.releaseCallback = release;\n                return this.databaseConnection;\n            });\n\n        } else { // master\n            this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(([connection, release]: any[]) => {\n                this.driver.connectedQueryRunners.push(this);\n                this.databaseConnection = connection;\n                this.releaseCallback = release;\n                return this.databaseConnection;\n            });\n        }\n\n        return this.databaseConnectionPromise;\n    }\n\n    /**\n     * Releases used database connection.\n     * You cannot use query runner methods once its released.\n     */\n    release(): Promise<void> {\n        this.isReleased = true;\n        if (this.releaseCallback)\n            this.releaseCallback();\n\n        const index = this.driver.connectedQueryRunners.indexOf(this);\n        if (index !== -1) this.driver.connectedQueryRunners.splice(index);\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Starts transaction.\n     */\n    async startTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n        if (this.isTransactionActive)\n            throw new TransactionAlreadyStartedError();\n\n        this.isTransactionActive = true;\n        await this.query(\"START TRANSACTION\");\n        if (isolationLevel) {\n            await this.query(\"SET TRANSACTION ISOLATION LEVEL \" + isolationLevel);\n        }\n    }\n\n    /**\n     * Commits transaction.\n     * Error will be thrown if transaction was not started.\n     */\n    async commitTransaction(): Promise<void> {\n        if (!this.isTransactionActive)\n            throw new TransactionNotStartedError();\n\n        await this.query(\"COMMIT\");\n        this.isTransactionActive = false;\n    }\n\n    /**\n     * Rollbacks transaction.\n     * Error will be thrown if transaction was not started.\n     */\n    async rollbackTransaction(): Promise<void> {\n        if (!this.isTransactionActive)\n            throw new TransactionNotStartedError();\n\n        await this.query(\"ROLLBACK\");\n        this.isTransactionActive = false;\n    }\n\n    /**\n     * Executes a given SQL query.\n     */\n    query(query: string, parameters?: any[]): Promise<any> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        return new Promise<any[]>(async (ok, fail) => {\n            try {\n                const databaseConnection = await this.connect();\n                this.driver.connection.logger.logQuery(query, parameters, this);\n                const queryStartTime = +new Date();\n\n                databaseConnection.query(query, parameters, (err: any, result: any) => {\n\n                    // log slow queries if maxQueryExecution time is set\n                    const maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n                    const queryEndTime = +new Date();\n                    const queryExecutionTime = queryEndTime - queryStartTime;\n                    if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n                        this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n                    if (err) {\n                        this.driver.connection.logger.logQueryError(err, query, parameters, this);\n                        fail(new QueryFailedError(query, parameters, err));\n                    } else {\n                        switch (result.command) {\n                            case \"DELETE\":\n                                // for DELETE query additionally return number of affected rows\n                                ok([result.rows, result.rowCount]);\n                                break;\n                            default:\n                                ok(result.rows);\n                        }\n                    }\n                });\n\n            } catch (err) {\n                fail(err);\n            }\n        });\n    }\n\n    /**\n     * Returns raw data stream.\n     */\n    stream(query: string, parameters?: any[], onEnd?: Function, onError?: Function): Promise<ReadStream> {\n        const QueryStream = this.driver.loadStreamDependency();\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        return new Promise(async (ok, fail) => {\n            try {\n                const databaseConnection = await this.connect();\n                this.driver.connection.logger.logQuery(query, parameters, this);\n                const stream = databaseConnection.query(new QueryStream(query, parameters));\n                if (onEnd) stream.on(\"end\", onEnd);\n                if (onError) stream.on(\"error\", onError);\n                ok(stream);\n\n            } catch (err) {\n                fail(err);\n            }\n        });\n    }\n\n    /**\n     * Returns all available database names including system databases.\n     */\n    async getDatabases(): Promise<string[]> {\n        return Promise.resolve([]);\n    }\n\n    /**\n     * Returns all available schema names including system schemas.\n     * If database parameter specified, returns schemas of that database.\n     */\n    async getSchemas(database?: string): Promise<string[]> {\n        return Promise.resolve([]);\n    }\n\n    /**\n     * Checks if database with the given name exist.\n     */\n    async hasDatabase(database: string): Promise<boolean> {\n        return Promise.resolve(false);\n    }\n\n    /**\n     * Checks if schema with the given name exist.\n     */\n    async hasSchema(schema: string): Promise<boolean> {\n        const result = await this.query(`SELECT * FROM \"information_schema\".\"schemata\" WHERE \"schema_name\" = '${schema}'`);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Checks if table with the given name exist in the database.\n     */\n    async hasTable(tableOrName: Table|string): Promise<boolean> {\n        const parsedTableName = this.parseTableName(tableOrName);\n        const sql = `SELECT * FROM \"information_schema\".\"tables\" WHERE \"table_schema\" = ${parsedTableName.schema} AND \"table_name\" = ${parsedTableName.tableName}`;\n        const result = await this.query(sql);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Checks if column with the given name exist in the given table.\n     */\n    async hasColumn(tableOrName: Table|string, columnName: string): Promise<boolean> {\n        const parsedTableName = this.parseTableName(tableOrName);\n        const sql = `SELECT * FROM \"information_schema\".\"columns\" WHERE \"table_schema\" = ${parsedTableName.schema} AND \"table_name\" = ${parsedTableName.tableName} AND \"column_name\" = '${columnName}'`;\n        const result = await this.query(sql);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Creates a new database.\n     * Postgres does not supports database creation inside a transaction block.\n     */\n    async createDatabase(database: string, ifNotExist?: boolean): Promise<void> {\n        await Promise.resolve();\n    }\n\n    /**\n     * Drops database.\n     * Postgres does not supports database drop inside a transaction block.\n     */\n    async dropDatabase(database: string, ifExist?: boolean): Promise<void> {\n        return Promise.resolve();\n    }\n\n    /**\n     * Creates a new table schema.\n     */\n    async createSchema(schema: string, ifNotExist?: boolean): Promise<void> {\n        const up = ifNotExist ? `CREATE SCHEMA IF NOT EXISTS \"${schema}\"` : `CREATE SCHEMA \"${schema}\"`;\n        const down = `DROP SCHEMA \"${schema}\" CASCADE`;\n        await this.executeQueries(new Query(up), new Query(down));\n    }\n\n    /**\n     * Drops table schema.\n     */\n    async dropSchema(schemaPath: string, ifExist?: boolean, isCascade?: boolean): Promise<void> {\n        const schema = schemaPath.indexOf(\".\") === -1 ? schemaPath : schemaPath.split(\".\")[0];\n        const up = ifExist ? `DROP SCHEMA IF EXISTS \"${schema}\" ${isCascade ? \"CASCADE\" : \"\"}` : `DROP SCHEMA \"${schema}\" ${isCascade ? \"CASCADE\" : \"\"}`;\n        const down = `CREATE SCHEMA \"${schema}\"`;\n        await this.executeQueries(new Query(up), new Query(down));\n    }\n\n    /**\n     * Creates a new table.\n     */\n    async createTable(table: Table, ifNotExist: boolean = false, createForeignKeys: boolean = true, createIndices: boolean = true): Promise<void> {\n        if (ifNotExist) {\n            const isTableExist = await this.hasTable(table);\n            if (isTableExist) return Promise.resolve();\n        }\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        // if table have column with ENUM type, we must create this type in postgres.\n        await Promise.all(table.columns\n            .filter(column => column.type === \"enum\" || column.type === \"simple-enum\")\n            .map(async column => {\n                const hasEnum = await this.hasEnumType(table, column);\n                // TODO: Should also check if values of existing type matches expected ones\n                if (!hasEnum) {\n                    upQueries.push(this.createEnumTypeSql(table, column));\n                    downQueries.push(this.dropEnumTypeSql(table, column));\n                }\n                return Promise.resolve();\n            }));\n\n        upQueries.push(this.createTableSql(table, createForeignKeys));\n        downQueries.push(this.dropTableSql(table));\n\n        // if createForeignKeys is true, we must drop created foreign keys in down query.\n        // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n        if (createForeignKeys)\n            table.foreignKeys.forEach(foreignKey => downQueries.push(this.dropForeignKeySql(table, foreignKey)));\n\n        if (createIndices) {\n            table.indices.forEach(index => {\n\n                // new index may be passed without name. In this case we generate index name manually.\n                if (!index.name)\n                    index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n                upQueries.push(this.createIndexSql(table, index));\n                downQueries.push(this.dropIndexSql(table, index));\n            });\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Drops the table.\n     */\n    async dropTable(target: Table|string, ifExist?: boolean, dropForeignKeys: boolean = true, dropIndices: boolean = true): Promise<void> {// It needs because if table does not exist and dropForeignKeys or dropIndices is true, we don't need\n        // to perform drop queries for foreign keys and indices.\n        if (ifExist) {\n            const isTableExist = await this.hasTable(target);\n            if (!isTableExist) return Promise.resolve();\n        }\n\n        // if dropTable called with dropForeignKeys = true, we must create foreign keys in down query.\n        const createForeignKeys: boolean = dropForeignKeys;\n        const tableName = target instanceof Table ? target.name : target;\n        const table = await this.getCachedTable(tableName);\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n\n        if (dropIndices) {\n            table.indices.forEach(index => {\n                upQueries.push(this.dropIndexSql(table, index));\n                downQueries.push(this.createIndexSql(table, index));\n            });\n        }\n\n        if (dropForeignKeys)\n            table.foreignKeys.forEach(foreignKey => upQueries.push(this.dropForeignKeySql(table, foreignKey)));\n\n        upQueries.push(this.dropTableSql(table));\n        downQueries.push(this.createTableSql(table, createForeignKeys));\n\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Creates a new view.\n     */\n    async createView(view: View): Promise<void> {\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        upQueries.push(this.createViewSql(view));\n        upQueries.push(await this.insertViewDefinitionSql(view));\n        downQueries.push(this.dropViewSql(view));\n        downQueries.push(await this.deleteViewDefinitionSql(view));\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Drops the view.\n     */\n    async dropView(target: View|string): Promise<void> {\n        const viewName = target instanceof View ? target.name : target;\n        const view = await this.getCachedView(viewName);\n\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        upQueries.push(await this.deleteViewDefinitionSql(view));\n        upQueries.push(this.dropViewSql(view));\n        downQueries.push(await this.insertViewDefinitionSql(view));\n        downQueries.push(this.createViewSql(view));\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Renames the given table.\n     */\n    async renameTable(oldTableOrName: Table|string, newTableName: string): Promise<void> {\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        const oldTable = oldTableOrName instanceof Table ? oldTableOrName : await this.getCachedTable(oldTableOrName);\n        const newTable = oldTable.clone();\n        const oldTableName = oldTable.name.indexOf(\".\") === -1 ? oldTable.name : oldTable.name.split(\".\")[1];\n        const schemaName = oldTable.name.indexOf(\".\") === -1 ? undefined : oldTable.name.split(\".\")[0];\n        newTable.name = schemaName ? `${schemaName}.${newTableName}` : newTableName;\n\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(oldTable)} RENAME TO \"${newTableName}\"`));\n        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME TO \"${oldTableName}\"`));\n\n        // rename column primary key constraint\n        if (newTable.primaryColumns.length > 0) {\n            const columnNames = newTable.primaryColumns.map(column => column.name);\n\n            const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);\n            const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);\n\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT \"${oldPkName}\" TO \"${newPkName}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT \"${newPkName}\" TO \"${oldPkName}\"`));\n        }\n\n        // rename unique constraints\n        newTable.uniques.forEach(unique => {\n            // build new constraint name\n            const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n\n            // build queries\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT \"${unique.name}\" TO \"${newUniqueName}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT \"${newUniqueName}\" TO \"${unique.name}\"`));\n\n            // replace constraint name\n            unique.name = newUniqueName;\n        });\n\n        // rename index constraints\n        newTable.indices.forEach(index => {\n            // build new constraint name\n            const schema = this.extractSchema(newTable);\n            const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n\n            // build queries\n            const up = schema ? `ALTER INDEX \"${schema}\".\"${index.name}\" RENAME TO \"${newIndexName}\"` : `ALTER INDEX \"${index.name}\" RENAME TO \"${newIndexName}\"`;\n            const down = schema ? `ALTER INDEX \"${schema}\".\"${newIndexName}\" RENAME TO \"${index.name}\"` : `ALTER INDEX \"${newIndexName}\" RENAME TO \"${index.name}\"`;\n            upQueries.push(new Query(up));\n            downQueries.push(new Query(down));\n\n            // replace constraint name\n            index.name = newIndexName;\n        });\n\n        // rename foreign key constraints\n        newTable.foreignKeys.forEach(foreignKey => {\n            // build new constraint name\n            const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames);\n\n            // build queries\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT \"${foreignKey.name}\" TO \"${newForeignKeyName}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT \"${newForeignKeyName}\" TO \"${foreignKey.name}\"`));\n\n            // replace constraint name\n            foreignKey.name = newForeignKeyName;\n        });\n\n        // rename ENUM types\n        const enumColumns = newTable.columns.filter(column => column.type === \"enum\" || column.type === \"simple-enum\");\n        for (let column of enumColumns) {\n            const oldEnumType = await this.getEnumTypeName(oldTable, column);\n            upQueries.push(new Query(`ALTER TYPE \"${oldEnumType.enumTypeSchema}\".\"${oldEnumType.enumTypeName}\" RENAME TO ${this.buildEnumName(newTable, column, false)}`));\n            downQueries.push(new Query(`ALTER TYPE ${this.buildEnumName(newTable, column)} RENAME TO \"${oldEnumType.enumTypeName}\"`));\n        }\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Creates a new column from the column in the table.\n     */\n    async addColumn(tableOrName: Table|string, column: TableColumn): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        if (column.type === \"enum\" || column.type === \"simple-enum\") {\n            const hasEnum = await this.hasEnumType(table, column);\n            if (!hasEnum) {\n                upQueries.push(this.createEnumTypeSql(table, column));\n                downQueries.push(this.dropEnumTypeSql(table, column));\n            }\n        }\n\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column)}`));\n        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN \"${column.name}\"`));\n\n        // create or update primary key constraint\n        if (column.isPrimary) {\n            const primaryColumns = clonedTable.primaryColumns;\n            // if table already have primary key, me must drop it and recreate again\n            if (primaryColumns.length > 0) {\n                const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n            }\n\n            primaryColumns.push(column);\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n            const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n        }\n\n        // create column index\n        const columnIndex = clonedTable.indices.find(index => index.columnNames.length === 1 && index.columnNames[0] === column.name);\n        if (columnIndex) {\n            upQueries.push(this.createIndexSql(table, columnIndex));\n            downQueries.push(this.dropIndexSql(table, columnIndex));\n        }\n\n        // create unique constraint\n        if (column.isUnique) {\n            const uniqueConstraint = new TableUnique({\n                name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n                columnNames: [column.name]\n            });\n            clonedTable.uniques.push(uniqueConstraint);\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (\"${column.name}\")`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${uniqueConstraint.name}\"`));\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n\n        clonedTable.addColumn(column);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Creates a new columns from the column in the table.\n     */\n    async addColumns(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        await PromiseUtils.runInSequence(columns, column => this.addColumn(tableOrName, column));\n    }\n\n    /**\n     * Renames column in the given table.\n     */\n    async renameColumn(tableOrName: Table|string, oldTableColumnOrName: TableColumn|string, newTableColumnOrName: TableColumn|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(c => c.name === oldTableColumnOrName);\n        if (!oldColumn)\n            throw new Error(`Column \"${oldTableColumnOrName}\" was not found in the \"${table.name}\" table.`);\n\n        let newColumn;\n        if (newTableColumnOrName instanceof TableColumn) {\n            newColumn = newTableColumnOrName;\n        } else {\n            newColumn = oldColumn.clone();\n            newColumn.name = newTableColumnOrName;\n        }\n\n        return this.changeColumn(table, oldColumn, newColumn);\n    }\n\n    /**\n     * Changes a column in the table.\n     */\n    async changeColumn(tableOrName: Table|string, oldTableColumnOrName: TableColumn|string, newColumn: TableColumn): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        let clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        const oldColumn = oldTableColumnOrName instanceof TableColumn\n            ? oldTableColumnOrName\n            : table.columns.find(column => column.name === oldTableColumnOrName);\n        if (!oldColumn)\n            throw new Error(`Column \"${oldTableColumnOrName}\" was not found in the \"${table.name}\" table.`);\n\n        if (oldColumn.type !== newColumn.type || oldColumn.length !== newColumn.length) {\n            // To avoid data conversion, we just recreate column\n            await this.dropColumn(table, oldColumn);\n            await this.addColumn(table, newColumn);\n\n            // update cloned table\n            clonedTable = table.clone();\n\n        } else {\n            if (oldColumn.name !== newColumn.name) {\n                // rename column\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN \"${oldColumn.name}\" TO \"${newColumn.name}\"`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN \"${newColumn.name}\" TO \"${oldColumn.name}\"`));\n\n                // rename ENUM type\n                if (oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\") {\n                    const oldEnumType = await this.getEnumTypeName(table, oldColumn);\n                    upQueries.push(new Query(`ALTER TYPE \"${oldEnumType.enumTypeSchema}\".\"${oldEnumType.enumTypeName}\" RENAME TO ${this.buildEnumName(table, newColumn, false)}`));\n                    downQueries.push(new Query(`ALTER TYPE ${this.buildEnumName(table, newColumn)} RENAME TO \"${oldEnumType.enumTypeName}\"`));\n                }\n\n                // rename column primary key constraint\n                if (oldColumn.isPrimary === true) {\n                    const primaryColumns = clonedTable.primaryColumns;\n\n                    // build old primary constraint name\n                    const columnNames = primaryColumns.map(column => column.name);\n                    const oldPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n\n                    // replace old column name with new column name\n                    columnNames.splice(columnNames.indexOf(oldColumn.name), 1);\n                    columnNames.push(newColumn.name);\n\n                    // build new primary constraint name\n                    const newPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT \"${oldPkName}\" TO \"${newPkName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT \"${newPkName}\" TO \"${oldPkName}\"`));\n                }\n\n                // rename column sequence\n                if (oldColumn.isGenerated === true && newColumn.generationStrategy === \"increment\") {\n                    const schema = this.extractSchema(table);\n\n                    // building sequence name. Sequence without schema needed because it must be supplied in RENAME TO without\n                    // schema name, but schema needed in ALTER SEQUENCE argument.\n                    const seqName = this.buildSequenceName(table, oldColumn.name, undefined, true, true);\n                    const newSeqName = this.buildSequenceName(table, newColumn.name, undefined, true, true);\n\n                    const up = schema ? `ALTER SEQUENCE \"${schema}\".\"${seqName}\" RENAME TO \"${newSeqName}\"` : `ALTER SEQUENCE \"${seqName}\" RENAME TO \"${newSeqName}\"`;\n                    const down = schema ? `ALTER SEQUENCE \"${schema}\".\"${newSeqName}\" RENAME TO \"${seqName}\"` : `ALTER SEQUENCE \"${newSeqName}\" RENAME TO \"${seqName}\"`;\n                    upQueries.push(new Query(up));\n                    downQueries.push(new Query(down));\n                }\n\n                // rename unique constraints\n                clonedTable.findColumnUniques(oldColumn).forEach(unique => {\n                    // build new constraint name\n                    unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);\n                    unique.columnNames.push(newColumn.name);\n                    const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);\n\n                    // build queries\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT \"${unique.name}\" TO \"${newUniqueName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT \"${newUniqueName}\" TO \"${unique.name}\"`));\n\n                    // replace constraint name\n                    unique.name = newUniqueName;\n                });\n\n                // rename index constraints\n                clonedTable.findColumnIndices(oldColumn).forEach(index => {\n                    // build new constraint name\n                    index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);\n                    index.columnNames.push(newColumn.name);\n                    const schema = this.extractSchema(table);\n                    const newIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);\n\n                    // build queries\n                    const up = schema ? `ALTER INDEX \"${schema}\".\"${index.name}\" RENAME TO \"${newIndexName}\"` : `ALTER INDEX \"${index.name}\" RENAME TO \"${newIndexName}\"`;\n                    const down = schema ? `ALTER INDEX \"${schema}\".\"${newIndexName}\" RENAME TO \"${index.name}\"` : `ALTER INDEX \"${newIndexName}\" RENAME TO \"${index.name}\"`;\n                    upQueries.push(new Query(up));\n                    downQueries.push(new Query(down));\n\n                    // replace constraint name\n                    index.name = newIndexName;\n                });\n\n                // rename foreign key constraints\n                clonedTable.findColumnForeignKeys(oldColumn).forEach(foreignKey => {\n                    // build new constraint name\n                    foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);\n                    foreignKey.columnNames.push(newColumn.name);\n                    const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames);\n\n                    // build queries\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT \"${foreignKey.name}\" TO \"${newForeignKeyName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT \"${newForeignKeyName}\" TO \"${foreignKey.name}\"`));\n\n                    // replace constraint name\n                    foreignKey.name = newForeignKeyName;\n                });\n\n                // rename old column in the Table object\n                const oldTableColumn = clonedTable.columns.find(column => column.name === oldColumn.name);\n                clonedTable.columns[clonedTable.columns.indexOf(oldTableColumn!)].name = newColumn.name;\n                oldColumn.name = newColumn.name;\n            }\n\n            if (newColumn.precision !== oldColumn.precision || newColumn.scale !== oldColumn.scale) {\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" TYPE ${this.driver.createFullType(newColumn)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" TYPE ${this.driver.createFullType(oldColumn)}`));\n            }\n\n            if (\n                (newColumn.type === \"enum\" || newColumn.type === \"simple-enum\")\n                && (oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")\n                && !OrmUtils.isArraysEqual(newColumn.enum!, oldColumn.enum!)\n            ) {\n                const enumName = this.buildEnumName(table, newColumn);\n                const arraySuffix = newColumn.isArray ? \"[]\" : \"\";\n                const oldEnumName = this.buildEnumName(table, newColumn, true, false, true);\n                const oldEnumNameWithoutSchema = this.buildEnumName(table, newColumn, false, false, true);\n                const enumTypeBeforeColumnChange = await this.getEnumTypeName(table, oldColumn);\n\n                // rename old ENUM\n                upQueries.push(new Query(`ALTER TYPE \"${enumTypeBeforeColumnChange.enumTypeSchema}\".\"${enumTypeBeforeColumnChange.enumTypeName}\" RENAME TO ${oldEnumNameWithoutSchema}`));\n                downQueries.push(new Query(`ALTER TYPE ${oldEnumName} RENAME TO  \"${enumTypeBeforeColumnChange.enumTypeName}\"`));\n\n                // create new ENUM\n                upQueries.push(this.createEnumTypeSql(table, newColumn));\n                downQueries.push(this.dropEnumTypeSql(table, oldColumn));\n\n                // if column have default value, we must drop it to avoid issues with type casting\n                if (newColumn.default !== null && newColumn.default !== undefined) {\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" DROP DEFAULT`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" SET DEFAULT ${newColumn.default}`));\n                }\n\n                // build column types\n                const upType = `${enumName}${arraySuffix} USING \"${newColumn.name}\"::\"text\"::${enumName}${arraySuffix}`;\n                const downType = `${oldEnumName}${arraySuffix} USING \"${newColumn.name}\"::\"text\"::${oldEnumName}${arraySuffix}`;\n\n                // update column to use new type\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" TYPE ${upType}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" TYPE ${downType}`));\n\n                // if column have default value and we dropped it before, we must bring it back\n                if (newColumn.default !== null && newColumn.default !== undefined) {\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" SET DEFAULT ${newColumn.default}`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" DROP DEFAULT`));\n                }\n\n                // remove old ENUM\n                upQueries.push(this.dropEnumTypeSql(table, newColumn, oldEnumName));\n                downQueries.push(this.createEnumTypeSql(table, oldColumn, oldEnumName));\n            }\n\n            if (oldColumn.isNullable !== newColumn.isNullable) {\n                if (newColumn.isNullable) {\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${oldColumn.name}\" DROP NOT NULL`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${oldColumn.name}\" SET NOT NULL`));\n                } else {\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${oldColumn.name}\" SET NOT NULL`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${oldColumn.name}\" DROP NOT NULL`));\n                }\n            }\n\n            if (oldColumn.comment !== newColumn.comment) {\n                upQueries.push(new Query(`COMMENT ON COLUMN ${this.escapePath(table)}.\"${oldColumn.name}\" IS '${newColumn.comment}'`));\n                downQueries.push(new Query(`COMMENT ON COLUMN ${this.escapePath(table)}.\"${newColumn.name}\" IS '${oldColumn.comment}'`));\n            }\n\n            if (newColumn.isPrimary !== oldColumn.isPrimary) {\n                const primaryColumns = clonedTable.primaryColumns;\n\n                // if primary column state changed, we must always drop existed constraint.\n                if (primaryColumns.length > 0) {\n                    const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                    const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                }\n\n                if (newColumn.isPrimary === true) {\n                    primaryColumns.push(newColumn);\n                    // update column in table\n                    const column = clonedTable.columns.find(column => column.name === newColumn.name);\n                    column!.isPrimary = true;\n                    const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                    const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n\n                } else {\n                    const primaryColumn = primaryColumns.find(c => c.name === newColumn.name);\n                    primaryColumns.splice(primaryColumns.indexOf(primaryColumn!), 1);\n\n                    // update column in table\n                    const column = clonedTable.columns.find(column => column.name === newColumn.name);\n                    column!.isPrimary = false;\n\n                    // if we have another primary keys, we must recreate constraint.\n                    if (primaryColumns.length > 0) {\n                        const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                        const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n                    }\n                }\n            }\n\n            if (newColumn.isUnique !== oldColumn.isUnique) {\n                if (newColumn.isUnique === true) {\n                    const uniqueConstraint = new TableUnique({\n                        name: this.connection.namingStrategy.uniqueConstraintName(table.name, [newColumn.name]),\n                        columnNames: [newColumn.name]\n                    });\n                    clonedTable.uniques.push(uniqueConstraint);\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (\"${newColumn.name}\")`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${uniqueConstraint.name}\"`));\n\n                } else {\n                    const uniqueConstraint = clonedTable.uniques.find(unique => {\n                        return unique.columnNames.length === 1 && !!unique.columnNames.find(columnName => columnName === newColumn.name);\n                    });\n                    clonedTable.uniques.splice(clonedTable.uniques.indexOf(uniqueConstraint!), 1);\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${uniqueConstraint!.name}\"`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${uniqueConstraint!.name}\" UNIQUE (\"${newColumn.name}\")`));\n                }\n            }\n\n            if (oldColumn.isGenerated !== newColumn.isGenerated && newColumn.generationStrategy !== \"uuid\") {\n                if (newColumn.isGenerated === true) {\n                    upQueries.push(new Query(`CREATE SEQUENCE ${this.buildSequenceName(table, newColumn)} OWNED BY ${this.escapePath(table)}.\"${newColumn.name}\"`));\n                    downQueries.push(new Query(`DROP SEQUENCE ${this.buildSequenceName(table, newColumn)}`));\n\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" SET DEFAULT nextval('${this.buildSequenceName(table, newColumn, undefined, true)}')`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" DROP DEFAULT`));\n\n                } else {\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" DROP DEFAULT`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" SET DEFAULT nextval('${this.buildSequenceName(table, newColumn, undefined, true)}')`));\n\n                    upQueries.push(new Query(`DROP SEQUENCE ${this.buildSequenceName(table, newColumn)}`));\n                    downQueries.push(new Query(`CREATE SEQUENCE ${this.buildSequenceName(table, newColumn)} OWNED BY ${this.escapePath(table)}.\"${newColumn.name}\"`));\n                }\n            }\n\n            if (newColumn.default !== oldColumn.default) {\n                if (newColumn.default !== null && newColumn.default !== undefined) {\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" SET DEFAULT ${newColumn.default}`));\n\n                    if (oldColumn.default !== null && oldColumn.default !== undefined) {\n                        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" SET DEFAULT ${oldColumn.default}`));\n                    } else {\n                        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" DROP DEFAULT`));\n                    }\n\n                } else if (oldColumn.default !== null && oldColumn.default !== undefined) {\n                    upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" DROP DEFAULT`));\n                    downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" SET DEFAULT ${oldColumn.default}`));\n                }\n            }\n\n            if ((newColumn.spatialFeatureType || \"\").toLowerCase() !== (oldColumn.spatialFeatureType || \"\").toLowerCase() || newColumn.srid !== oldColumn.srid) {\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" TYPE ${this.driver.createFullType(newColumn)}`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN \"${newColumn.name}\" TYPE ${this.driver.createFullType(oldColumn)}`));\n            }\n\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Changes a column in the table.\n     */\n    async changeColumns(tableOrName: Table|string, changedColumns: { newColumn: TableColumn, oldColumn: TableColumn }[]): Promise<void> {\n        await PromiseUtils.runInSequence(changedColumns, changedColumn => this.changeColumn(tableOrName, changedColumn.oldColumn, changedColumn.newColumn));\n    }\n\n    /**\n     * Drops column in the table.\n     */\n    async dropColumn(tableOrName: Table|string, columnOrName: TableColumn|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n        if (!column)\n            throw new Error(`Column \"${columnOrName}\" was not found in table \"${table.name}\"`);\n\n        const clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        // drop primary key constraint\n        if (column.isPrimary) {\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(column => column.name));\n            const columnNames = clonedTable.primaryColumns.map(primaryColumn => `\"${primaryColumn.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP CONSTRAINT \"${pkName}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n\n            // update column in table\n            const tableColumn = clonedTable.findColumnByName(column.name);\n            tableColumn!.isPrimary = false;\n\n            // if primary key have multiple columns, we must recreate it without dropped column\n            if (clonedTable.primaryColumns.length > 0) {\n                const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(column => column.name));\n                const columnNames = clonedTable.primaryColumns.map(primaryColumn => `\"${primaryColumn.name}\"`).join(\", \");\n                upQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                downQueries.push(new Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP CONSTRAINT \"${pkName}\"`));\n            }\n        }\n\n        // drop column index\n        const columnIndex = clonedTable.indices.find(index => index.columnNames.length === 1 && index.columnNames[0] === column.name);\n        if (columnIndex) {\n            clonedTable.indices.splice(clonedTable.indices.indexOf(columnIndex), 1);\n            upQueries.push(this.dropIndexSql(table, columnIndex));\n            downQueries.push(this.createIndexSql(table, columnIndex));\n        }\n\n        // drop column check\n        const columnCheck = clonedTable.checks.find(check => !!check.columnNames && check.columnNames.length === 1 && check.columnNames[0] === column.name);\n        if (columnCheck) {\n            clonedTable.checks.splice(clonedTable.checks.indexOf(columnCheck), 1);\n            upQueries.push(this.dropCheckConstraintSql(table, columnCheck));\n            downQueries.push(this.createCheckConstraintSql(table, columnCheck));\n        }\n\n        // drop column unique\n        const columnUnique = clonedTable.uniques.find(unique => unique.columnNames.length === 1 && unique.columnNames[0] === column.name);\n        if (columnUnique) {\n            clonedTable.uniques.splice(clonedTable.uniques.indexOf(columnUnique), 1);\n            upQueries.push(this.dropUniqueConstraintSql(table, columnUnique));\n            downQueries.push(this.createUniqueConstraintSql(table, columnUnique));\n        }\n\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN \"${column.name}\"`));\n        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column)}`));\n\n        // drop enum type\n        if (column.type === \"enum\" || column.type === \"simple-enum\") {\n            const hasEnum = await this.hasEnumType(table, column);\n            if (hasEnum) {\n                const enumType = await this.getEnumTypeName(table, column);\n                const escapedEnumName = `\"${enumType.enumTypeSchema}\".\"${enumType.enumTypeName}\"`;\n                upQueries.push(this.dropEnumTypeSql(table, column, escapedEnumName));\n                downQueries.push(this.createEnumTypeSql(table, column, escapedEnumName));\n            }\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n\n        clonedTable.removeColumn(column);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Drops the columns in the table.\n     */\n    async dropColumns(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        await PromiseUtils.runInSequence(columns, column => this.dropColumn(tableOrName, column));\n    }\n\n    /**\n     * Creates a new primary key.\n     */\n    async createPrimaryKey(tableOrName: Table|string, columnNames: string[]): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const clonedTable = table.clone();\n\n        const up = this.createPrimaryKeySql(table, columnNames);\n\n        // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.\n        clonedTable.columns.forEach(column => {\n            if (columnNames.find(columnName => columnName === column.name))\n                column.isPrimary = true;\n        });\n        const down = this.dropPrimaryKeySql(clonedTable);\n\n        await this.executeQueries(up, down);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Updates composite primary keys.\n     */\n    async updatePrimaryKeys(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const clonedTable = table.clone();\n        const columnNames = columns.map(column => column.name);\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        // if table already have primary columns, we must drop them.\n        const primaryColumns = clonedTable.primaryColumns;\n        if (primaryColumns.length > 0) {\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n            const columnNamesString = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n            downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNamesString})`));\n        }\n\n        // update columns in table.\n        clonedTable.columns\n            .filter(column => columnNames.indexOf(column.name) !== -1)\n            .forEach(column => column.isPrimary = true);\n\n        const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, columnNames);\n        const columnNamesString = columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNamesString})`));\n        downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${pkName}\"`));\n\n        await this.executeQueries(upQueries, downQueries);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Drops a primary key.\n     */\n    async dropPrimaryKey(tableOrName: Table|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const up = this.dropPrimaryKeySql(table);\n        const down = this.createPrimaryKeySql(table, table.primaryColumns.map(column => column.name));\n        await this.executeQueries(up, down);\n        table.primaryColumns.forEach(column => {\n            column.isPrimary = false;\n        });\n    }\n\n    /**\n     * Creates new unique constraint.\n     */\n    async createUniqueConstraint(tableOrName: Table|string, uniqueConstraint: TableUnique): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new unique constraint may be passed without name. In this case we generate unique name manually.\n        if (!uniqueConstraint.name)\n            uniqueConstraint.name = this.connection.namingStrategy.uniqueConstraintName(table.name, uniqueConstraint.columnNames);\n\n        const up = this.createUniqueConstraintSql(table, uniqueConstraint);\n        const down = this.dropUniqueConstraintSql(table, uniqueConstraint);\n        await this.executeQueries(up, down);\n        table.addUniqueConstraint(uniqueConstraint);\n    }\n\n    /**\n     * Creates new unique constraints.\n     */\n    async createUniqueConstraints(tableOrName: Table|string, uniqueConstraints: TableUnique[]): Promise<void> {\n        await PromiseUtils.runInSequence(uniqueConstraints, uniqueConstraint => this.createUniqueConstraint(tableOrName, uniqueConstraint));\n    }\n\n    /**\n     * Drops unique constraint.\n     */\n    async dropUniqueConstraint(tableOrName: Table|string, uniqueOrName: TableUnique|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(u => u.name === uniqueOrName);\n        if (!uniqueConstraint)\n            throw new Error(`Supplied unique constraint was not found in table ${table.name}`);\n\n        const up = this.dropUniqueConstraintSql(table, uniqueConstraint);\n        const down = this.createUniqueConstraintSql(table, uniqueConstraint);\n        await this.executeQueries(up, down);\n        table.removeUniqueConstraint(uniqueConstraint);\n    }\n\n    /**\n     * Drops unique constraints.\n     */\n    async dropUniqueConstraints(tableOrName: Table|string, uniqueConstraints: TableUnique[]): Promise<void> {\n        await PromiseUtils.runInSequence(uniqueConstraints, uniqueConstraint => this.dropUniqueConstraint(tableOrName, uniqueConstraint));\n    }\n\n    /**\n     * Creates new check constraint.\n     */\n    async createCheckConstraint(tableOrName: Table|string, checkConstraint: TableCheck): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new unique constraint may be passed without name. In this case we generate unique name manually.\n        if (!checkConstraint.name)\n            checkConstraint.name = this.connection.namingStrategy.checkConstraintName(table.name, checkConstraint.expression!);\n\n        const up = this.createCheckConstraintSql(table, checkConstraint);\n        const down = this.dropCheckConstraintSql(table, checkConstraint);\n        await this.executeQueries(up, down);\n        table.addCheckConstraint(checkConstraint);\n    }\n\n    /**\n     * Creates new check constraints.\n     */\n    async createCheckConstraints(tableOrName: Table|string, checkConstraints: TableCheck[]): Promise<void> {\n        const promises = checkConstraints.map(checkConstraint => this.createCheckConstraint(tableOrName, checkConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops check constraint.\n     */\n    async dropCheckConstraint(tableOrName: Table|string, checkOrName: TableCheck|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(c => c.name === checkOrName);\n        if (!checkConstraint)\n            throw new Error(`Supplied check constraint was not found in table ${table.name}`);\n\n        const up = this.dropCheckConstraintSql(table, checkConstraint);\n        const down = this.createCheckConstraintSql(table, checkConstraint);\n        await this.executeQueries(up, down);\n        table.removeCheckConstraint(checkConstraint);\n    }\n\n    /**\n     * Drops check constraints.\n     */\n    async dropCheckConstraints(tableOrName: Table|string, checkConstraints: TableCheck[]): Promise<void> {\n        const promises = checkConstraints.map(checkConstraint => this.dropCheckConstraint(tableOrName, checkConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Creates new exclusion constraint.\n     */\n    async createExclusionConstraint(tableOrName: Table|string, exclusionConstraint: TableExclusion): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new unique constraint may be passed without name. In this case we generate unique name manually.\n        if (!exclusionConstraint.name)\n            exclusionConstraint.name = this.connection.namingStrategy.exclusionConstraintName(table.name, exclusionConstraint.expression!);\n\n        const up = this.createExclusionConstraintSql(table, exclusionConstraint);\n        const down = this.dropExclusionConstraintSql(table, exclusionConstraint);\n        await this.executeQueries(up, down);\n        table.addExclusionConstraint(exclusionConstraint);\n    }\n\n    /**\n     * Creates new exclusion constraints.\n     */\n    async createExclusionConstraints(tableOrName: Table|string, exclusionConstraints: TableExclusion[]): Promise<void> {\n        const promises = exclusionConstraints.map(exclusionConstraint => this.createExclusionConstraint(tableOrName, exclusionConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops exclusion constraint.\n     */\n    async dropExclusionConstraint(tableOrName: Table|string, exclusionOrName: TableExclusion|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const exclusionConstraint = exclusionOrName instanceof TableExclusion ? exclusionOrName : table.exclusions.find(c => c.name === exclusionOrName);\n        if (!exclusionConstraint)\n            throw new Error(`Supplied exclusion constraint was not found in table ${table.name}`);\n\n        const up = this.dropExclusionConstraintSql(table, exclusionConstraint);\n        const down = this.createExclusionConstraintSql(table, exclusionConstraint);\n        await this.executeQueries(up, down);\n        table.removeExclusionConstraint(exclusionConstraint);\n    }\n\n    /**\n     * Drops exclusion constraints.\n     */\n    async dropExclusionConstraints(tableOrName: Table|string, exclusionConstraints: TableExclusion[]): Promise<void> {\n        const promises = exclusionConstraints.map(exclusionConstraint => this.dropExclusionConstraint(tableOrName, exclusionConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Creates a new foreign key.\n     */\n    async createForeignKey(tableOrName: Table|string, foreignKey: TableForeignKey): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new FK may be passed without name. In this case we generate FK name manually.\n        if (!foreignKey.name)\n            foreignKey.name = this.connection.namingStrategy.foreignKeyName(table.name, foreignKey.columnNames);\n\n        const up = this.createForeignKeySql(table, foreignKey);\n        const down = this.dropForeignKeySql(table, foreignKey);\n        await this.executeQueries(up, down);\n        table.addForeignKey(foreignKey);\n    }\n\n    /**\n     * Creates a new foreign keys.\n     */\n    async createForeignKeys(tableOrName: Table|string, foreignKeys: TableForeignKey[]): Promise<void> {\n        await PromiseUtils.runInSequence(foreignKeys, foreignKey => this.createForeignKey(tableOrName, foreignKey));\n    }\n\n    /**\n     * Drops a foreign key from the table.\n     */\n    async dropForeignKey(tableOrName: Table|string, foreignKeyOrName: TableForeignKey|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(fk => fk.name === foreignKeyOrName);\n        if (!foreignKey)\n            throw new Error(`Supplied foreign key was not found in table ${table.name}`);\n\n        const up = this.dropForeignKeySql(table, foreignKey);\n        const down = this.createForeignKeySql(table, foreignKey);\n        await this.executeQueries(up, down);\n        table.removeForeignKey(foreignKey);\n    }\n\n    /**\n     * Drops a foreign keys from the table.\n     */\n    async dropForeignKeys(tableOrName: Table|string, foreignKeys: TableForeignKey[]): Promise<void> {\n        await PromiseUtils.runInSequence(foreignKeys, foreignKey => this.dropForeignKey(tableOrName, foreignKey));\n    }\n\n    /**\n     * Creates a new index.\n     */\n    async createIndex(tableOrName: Table|string, index: TableIndex): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new index may be passed without name. In this case we generate index name manually.\n        if (!index.name)\n            index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n\n        const up = this.createIndexSql(table, index);\n        const down = this.dropIndexSql(table, index);\n        await this.executeQueries(up, down);\n        table.addIndex(index);\n    }\n\n    /**\n     * Creates a new indices\n     */\n    async createIndices(tableOrName: Table|string, indices: TableIndex[]): Promise<void> {\n        await PromiseUtils.runInSequence(indices, index => this.createIndex(tableOrName, index));\n    }\n\n    /**\n     * Drops an index from the table.\n     */\n    async dropIndex(tableOrName: Table|string, indexOrName: TableIndex|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(i => i.name === indexOrName);\n        if (!index)\n            throw new Error(`Supplied index was not found in table ${table.name}`);\n\n        const up = this.dropIndexSql(table, index);\n        const down = this.createIndexSql(table, index);\n        await this.executeQueries(up, down);\n        table.removeIndex(index);\n    }\n\n    /**\n     * Drops an indices from the table.\n     */\n    async dropIndices(tableOrName: Table|string, indices: TableIndex[]): Promise<void> {\n        await PromiseUtils.runInSequence(indices, index => this.dropIndex(tableOrName, index));\n    }\n\n    /**\n     * Clears all table contents.\n     * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n     */\n    async clearTable(tableName: string): Promise<void> {\n        await this.query(`TRUNCATE TABLE ${this.escapePath(tableName)}`);\n    }\n\n    /**\n     * Removes all tables from the currently connected database.\n     */\n    async clearDatabase(): Promise<void> {\n        const schemas: string[] = [];\n        this.connection.entityMetadatas\n            .filter(metadata => metadata.schema)\n            .forEach(metadata => {\n                const isSchemaExist = !!schemas.find(schema => schema === metadata.schema);\n                if (!isSchemaExist)\n                    schemas.push(metadata.schema!);\n            });\n        schemas.push(this.driver.options.schema || \"current_schema()\");\n        const schemaNamesString = schemas.map(name => {\n            return name === \"current_schema()\" ? name : \"'\" + name + \"'\";\n        }).join(\", \");\n\n        await this.startTransaction();\n        try {\n            const selectViewDropsQuery = `SELECT 'DROP VIEW IF EXISTS \"' || schemaname || '\".\"' || viewname || '\" CASCADE;' as \"query\" ` +\n             `FROM \"pg_views\" WHERE \"schemaname\" IN (${schemaNamesString}) AND \"viewname\" NOT IN ('geography_columns', 'geometry_columns', 'raster_columns', 'raster_overviews')`;\n            const dropViewQueries: ObjectLiteral[] = await this.query(selectViewDropsQuery);\n            await Promise.all(dropViewQueries.map(q => this.query(q[\"query\"])));\n\n            // ignore spatial_ref_sys; it's a special table supporting PostGIS\n            // TODO generalize this as this.driver.ignoreTables\n            const selectTableDropsQuery = `SELECT 'DROP TABLE IF EXISTS \"' || schemaname || '\".\"' || tablename || '\" CASCADE;' as \"query\" FROM \"pg_tables\" WHERE \"schemaname\" IN (${schemaNamesString}) AND \"tablename\" NOT IN ('spatial_ref_sys')`;\n            const dropTableQueries: ObjectLiteral[] = await this.query(selectTableDropsQuery);\n            await Promise.all(dropTableQueries.map(q => this.query(q[\"query\"])));\n            await this.dropEnumTypes(schemaNamesString);\n\n            await this.commitTransaction();\n\n        } catch (error) {\n            try { // we throw original error even if rollback thrown an error\n                await this.rollbackTransaction();\n            } catch (rollbackError) { }\n            throw error;\n        }\n    }\n\n    // -------------------------------------------------------------------------\n    // Protected Methods\n    // -------------------------------------------------------------------------\n\n    protected async loadViews(viewNames: string[]): Promise<View[]> {\n        const hasTable = await this.hasTable(this.getTypeormMetadataTableName());\n        if (!hasTable)\n            return Promise.resolve([]);\n\n        const currentSchemaQuery = await this.query(`SELECT * FROM current_schema()`);\n        const currentSchema = currentSchemaQuery[0][\"current_schema\"];\n\n        const viewsCondition = viewNames.map(viewName => {\n            let [schema, name] = viewName.split(\".\");\n            if (!name) {\n                name = schema;\n                schema = this.driver.options.schema || currentSchema;\n            }\n            return `(\"t\".\"schema\" = '${schema}' AND \"t\".\"name\" = '${name}')`;\n        }).join(\" OR \");\n\n        const query = `SELECT \"t\".*, \"v\".\"check_option\" FROM ${this.escapePath(this.getTypeormMetadataTableName())} \"t\" ` +\n            `INNER JOIN \"information_schema\".\"views\" \"v\" ON \"v\".\"table_schema\" = \"t\".\"schema\" AND \"v\".\"table_name\" = \"t\".\"name\" WHERE \"t\".\"type\" = 'VIEW' ${viewsCondition ? `AND (${viewsCondition})` : \"\"}`;\n        const dbViews = await this.query(query);\n        return dbViews.map((dbView: any) => {\n            const view = new View();\n            const schema = dbView[\"schema\"] === currentSchema && !this.driver.options.schema ? undefined : dbView[\"schema\"];\n            view.name = this.driver.buildTableName(dbView[\"name\"], schema);\n            view.expression = dbView[\"value\"];\n            return view;\n        });\n    }\n\n    /**\n     * Loads all tables (with given names) from the database and creates a Table from them.\n     */\n    protected async loadTables(tableNames: string[]): Promise<Table[]> {\n\n        // if no tables given then no need to proceed\n        if (!tableNames || !tableNames.length)\n            return [];\n\n        const currentSchemaQuery = await this.query(`SELECT * FROM current_schema()`);\n        const currentSchema = currentSchemaQuery[0][\"current_schema\"];\n\n        const tablesCondition = tableNames.map(tableName => {\n            let [schema, name] = tableName.split(\".\");\n            if (!name) {\n                name = schema;\n                schema = this.driver.options.schema || currentSchema;\n            }\n            return `(\"table_schema\" = '${schema}' AND \"table_name\" = '${name}')`;\n        }).join(\" OR \");\n        const tablesSql = `SELECT * FROM \"information_schema\".\"tables\" WHERE ` + tablesCondition;\n        const columnsSql = `SELECT *, ('\"' || \"udt_schema\" || '\".\"' || \"udt_name\" || '\"')::\"regtype\" AS \"regtype\" FROM \"information_schema\".\"columns\" WHERE ` + tablesCondition;\n\n        const constraintsCondition = tableNames.map(tableName => {\n            let [schema, name] = tableName.split(\".\");\n            if (!name) {\n                name = schema;\n                schema = this.driver.options.schema || currentSchema;\n            }\n            return `(\"ns\".\"nspname\" = '${schema}' AND \"t\".\"relname\" = '${name}')`;\n        }).join(\" OR \");\n\n        const constraintsSql = `SELECT \"ns\".\"nspname\" AS \"table_schema\", \"t\".\"relname\" AS \"table_name\", \"cnst\".\"conname\" AS \"constraint_name\", ` +\n            `CASE \"cnst\".\"contype\" WHEN 'x' THEN pg_get_constraintdef(\"cnst\".\"oid\", true) ELSE \"cnst\".\"consrc\" END AS \"expression\", ` +\n            `CASE \"cnst\".\"contype\" WHEN 'p' THEN 'PRIMARY' WHEN 'u' THEN 'UNIQUE' WHEN 'c' THEN 'CHECK' WHEN 'x' THEN 'EXCLUDE' END AS \"constraint_type\", \"a\".\"attname\" AS \"column_name\" ` +\n            `FROM \"pg_constraint\" \"cnst\" ` +\n            `INNER JOIN \"pg_class\" \"t\" ON \"t\".\"oid\" = \"cnst\".\"conrelid\" ` +\n            `INNER JOIN \"pg_namespace\" \"ns\" ON \"ns\".\"oid\" = \"cnst\".\"connamespace\" ` +\n            `LEFT JOIN \"pg_attribute\" \"a\" ON \"a\".\"attrelid\" = \"cnst\".\"conrelid\" AND \"a\".\"attnum\" = ANY (\"cnst\".\"conkey\") ` +\n            `WHERE \"t\".\"relkind\" = 'r' AND (${constraintsCondition})`;\n\n        const indicesSql = `SELECT \"ns\".\"nspname\" AS \"table_schema\", \"t\".\"relname\" AS \"table_name\", \"i\".\"relname\" AS \"constraint_name\", \"a\".\"attname\" AS \"column_name\", ` +\n            `CASE \"ix\".\"indisunique\" WHEN 't' THEN 'TRUE' ELSE'FALSE' END AS \"is_unique\", pg_get_expr(\"ix\".\"indpred\", \"ix\".\"indrelid\") AS \"condition\", ` +\n            `\"types\".\"typname\" AS \"type_name\" ` +\n            `FROM \"pg_class\" \"t\" ` +\n            `INNER JOIN \"pg_index\" \"ix\" ON \"ix\".\"indrelid\" = \"t\".\"oid\" ` +\n            `INNER JOIN \"pg_attribute\" \"a\" ON \"a\".\"attrelid\" = \"t\".\"oid\"  AND \"a\".\"attnum\" = ANY (\"ix\".\"indkey\") ` +\n            `INNER JOIN \"pg_namespace\" \"ns\" ON \"ns\".\"oid\" = \"t\".\"relnamespace\" ` +\n            `INNER JOIN \"pg_class\" \"i\" ON \"i\".\"oid\" = \"ix\".\"indexrelid\" ` +\n            `INNER JOIN \"pg_type\" \"types\" ON \"types\".\"oid\" = \"a\".\"atttypid\" ` +\n            `LEFT JOIN \"pg_constraint\" \"cnst\" ON \"cnst\".\"conname\" = \"i\".\"relname\" ` +\n            `WHERE \"t\".\"relkind\" = 'r' AND \"cnst\".\"contype\" IS NULL AND (${constraintsCondition})`;\n\n        const foreignKeysCondition = tableNames.map(tableName => {\n            let [schema, name] = tableName.split(\".\");\n            if (!name) {\n                name = schema;\n                schema = this.driver.options.schema || currentSchema;\n            }\n            return `(\"ns\".\"nspname\" = '${schema}' AND \"cl\".\"relname\" = '${name}')`;\n        }).join(\" OR \");\n        const foreignKeysSql = `SELECT \"con\".\"conname\" AS \"constraint_name\", \"con\".\"nspname\" AS \"table_schema\", \"con\".\"relname\" AS \"table_name\", \"att2\".\"attname\" AS \"column_name\", ` +\n            `\"ns\".\"nspname\" AS \"referenced_table_schema\", \"cl\".\"relname\" AS \"referenced_table_name\", \"att\".\"attname\" AS \"referenced_column_name\", \"con\".\"confdeltype\" AS \"on_delete\", ` +\n            `\"con\".\"confupdtype\" AS \"on_update\", \"con\".\"condeferrable\" AS \"deferrable\", \"con\".\"condeferred\" AS \"deferred\" ` +\n            `FROM ( ` +\n            `SELECT UNNEST (\"con1\".\"conkey\") AS \"parent\", UNNEST (\"con1\".\"confkey\") AS \"child\", \"con1\".\"confrelid\", \"con1\".\"conrelid\", \"con1\".\"conname\", \"con1\".\"contype\", \"ns\".\"nspname\", ` +\n            `\"cl\".\"relname\", \"con1\".\"condeferrable\", ` +\n            `CASE WHEN \"con1\".\"condeferred\" THEN 'INITIALLY DEFERRED' ELSE 'INITIALLY IMMEDIATE' END as condeferred, ` +\n            `CASE \"con1\".\"confdeltype\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \"confdeltype\", ` +\n            `CASE \"con1\".\"confupdtype\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \"confupdtype\" ` +\n            `FROM \"pg_class\" \"cl\" ` +\n            `INNER JOIN \"pg_namespace\" \"ns\" ON \"cl\".\"relnamespace\" = \"ns\".\"oid\" ` +\n            `INNER JOIN \"pg_constraint\" \"con1\" ON \"con1\".\"conrelid\" = \"cl\".\"oid\" ` +\n            `WHERE \"con1\".\"contype\" = 'f' AND (${foreignKeysCondition}) ` +\n            `) \"con\" ` +\n            `INNER JOIN \"pg_attribute\" \"att\" ON \"att\".\"attrelid\" = \"con\".\"confrelid\" AND \"att\".\"attnum\" = \"con\".\"child\" ` +\n            `INNER JOIN \"pg_class\" \"cl\" ON \"cl\".\"oid\" = \"con\".\"confrelid\" ` +\n            `INNER JOIN \"pg_namespace\" \"ns\" ON \"cl\".\"relnamespace\" = \"ns\".\"oid\" ` +\n            `INNER JOIN \"pg_attribute\" \"att2\" ON \"att2\".\"attrelid\" = \"con\".\"conrelid\" AND \"att2\".\"attnum\" = \"con\".\"parent\"`;\n        const [dbTables, dbColumns, dbConstraints, dbIndices, dbForeignKeys]: ObjectLiteral[][] = await Promise.all([\n            this.query(tablesSql),\n            this.query(columnsSql),\n            this.query(constraintsSql),\n            this.query(indicesSql),\n            this.query(foreignKeysSql),\n        ]);\n\n        // if tables were not found in the db, no need to proceed\n        if (!dbTables.length)\n            return [];\n\n        // create tables for loaded tables\n        return Promise.all(dbTables.map(async dbTable => {\n            const table = new Table();\n\n            // We do not need to join schema name, when database is by default.\n            // In this case we need local variable `tableFullName` for below comparision.\n            const schema = dbTable[\"table_schema\"] === currentSchema && !this.driver.options.schema ? undefined : dbTable[\"table_schema\"];\n            table.name = this.driver.buildTableName(dbTable[\"table_name\"], schema);\n            const tableFullName = this.driver.buildTableName(dbTable[\"table_name\"], dbTable[\"table_schema\"]);\n\n            // create columns from the loaded columns\n            table.columns = await Promise.all(dbColumns\n                .filter(dbColumn => this.driver.buildTableName(dbColumn[\"table_name\"], dbColumn[\"table_schema\"]) === tableFullName)\n                .map(async dbColumn => {\n\n                    const columnConstraints = dbConstraints.filter(dbConstraint => {\n                        return this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName && dbConstraint[\"column_name\"] === dbColumn[\"column_name\"];\n                    });\n\n                    const tableColumn = new TableColumn();\n                    tableColumn.name = dbColumn[\"column_name\"];\n                    tableColumn.type = dbColumn[\"regtype\"].toLowerCase();\n\n                    if (tableColumn.type === \"numeric\" || tableColumn.type === \"decimal\" || tableColumn.type === \"float\") {\n                        // If one of these properties was set, and another was not, Postgres sets '0' in to unspecified property\n                        // we set 'undefined' in to unspecified property to avoid changing column on sync\n                        if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n                            tableColumn.precision = dbColumn[\"numeric_precision\"];\n                        } else if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n                            tableColumn.precision = undefined;\n                        }\n                        if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n                            tableColumn.scale = dbColumn[\"numeric_scale\"];\n                        } else if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n                            tableColumn.scale = undefined;\n                        }\n                    }\n\n                    if (dbColumn[\"data_type\"].toLowerCase() === \"array\") {\n                        tableColumn.isArray = true;\n                        const type = tableColumn.type.replace(\"[]\", \"\");\n                        tableColumn.type = this.connection.driver.normalizeType({type: type});\n                    }\n\n                    if (tableColumn.type === \"interval\"\n                        || tableColumn.type === \"time without time zone\"\n                        || tableColumn.type === \"time with time zone\"\n                        || tableColumn.type === \"timestamp without time zone\"\n                        || tableColumn.type === \"timestamp with time zone\") {\n                        tableColumn.precision = !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"datetime_precision\"]) ? dbColumn[\"datetime_precision\"] : undefined;\n                    }\n\n                    if (tableColumn.type.indexOf(\"enum\") !== -1) {\n                        tableColumn.type = \"enum\";\n                        const sql = `SELECT \"e\".\"enumlabel\" AS \"value\" FROM \"pg_enum\" \"e\" ` +\n                        `INNER JOIN \"pg_type\" \"t\" ON \"t\".\"oid\" = \"e\".\"enumtypid\" ` +\n                        `INNER JOIN \"pg_namespace\" \"n\" ON \"n\".\"oid\" = \"t\".\"typnamespace\" ` +\n                        `WHERE \"n\".\"nspname\" = '${dbTable[\"table_schema\"]}' AND \"t\".\"typname\" = '${this.buildEnumName(table, tableColumn.name, false, true)}'`;\n                        const results: ObjectLiteral[] = await this.query(sql);\n                        tableColumn.enum = results.map(result => result[\"value\"]);\n                    }\n\n                    if (tableColumn.type === \"geometry\") {\n                        const geometryColumnSql = `SELECT * FROM (\n                        SELECT\n                          \"f_table_schema\" \"table_schema\",\n                          \"f_table_name\" \"table_name\",\n                          \"f_geometry_column\" \"column_name\",\n                          \"srid\",\n                          \"type\"\n                        FROM \"geometry_columns\"\n                      ) AS _\n                      WHERE ${tablesCondition} AND \"column_name\" = '${tableColumn.name}'`;\n\n                        const results: ObjectLiteral[] = await this.query(geometryColumnSql);\n                        tableColumn.spatialFeatureType = results[0].type;\n                        tableColumn.srid = results[0].srid;\n                    }\n\n                    if (tableColumn.type === \"geography\") {\n                        const geographyColumnSql = `SELECT * FROM (\n                        SELECT\n                          \"f_table_schema\" \"table_schema\",\n                          \"f_table_name\" \"table_name\",\n                          \"f_geography_column\" \"column_name\",\n                          \"srid\",\n                          \"type\"\n                        FROM \"geography_columns\"\n                      ) AS _\n                      WHERE ${tablesCondition} AND \"column_name\" = '${tableColumn.name}'`;\n\n                        const results: ObjectLiteral[] = await this.query(geographyColumnSql);\n                        tableColumn.spatialFeatureType = results[0].type;\n                        tableColumn.srid = results[0].srid;\n                    }\n\n                    // check only columns that have length property\n                    if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type as ColumnType) !== -1 && dbColumn[\"character_maximum_length\"]) {\n                        const length = dbColumn[\"character_maximum_length\"].toString();\n                        tableColumn.length = !this.isDefaultColumnLength(table, tableColumn, length) ? length : \"\";\n                    }\n                    tableColumn.isNullable = dbColumn[\"is_nullable\"] === \"YES\";\n                    tableColumn.isPrimary = !!columnConstraints.find(constraint => constraint[\"constraint_type\"] === \"PRIMARY\");\n\n                    const uniqueConstraint = columnConstraints.find(constraint => constraint[\"constraint_type\"] === \"UNIQUE\");\n                    const isConstraintComposite = uniqueConstraint\n                        ? !!dbConstraints.find(dbConstraint => dbConstraint[\"constraint_type\"] === \"UNIQUE\"\n                            && dbConstraint[\"constraint_name\"] === uniqueConstraint[\"constraint_name\"]\n                            && dbConstraint[\"column_name\"] !== dbColumn[\"column_name\"])\n                        : false;\n                    tableColumn.isUnique = !!uniqueConstraint && !isConstraintComposite;\n\n                    if (dbColumn[\"column_default\"] !== null && dbColumn[\"column_default\"] !== undefined) {\n                        if (dbColumn[\"column_default\"].replace(/\"/gi, \"\") === `nextval('${this.buildSequenceName(table, dbColumn[\"column_name\"], currentSchema, true)}'::regclass)`) {\n                            tableColumn.isGenerated = true;\n                            tableColumn.generationStrategy = \"increment\";\n                        } else if (dbColumn[\"column_default\"] === \"gen_random_uuid()\" || /^uuid_generate_v\\d\\(\\)/.test(dbColumn[\"column_default\"])) {\n                            tableColumn.isGenerated = true;\n                            tableColumn.generationStrategy = \"uuid\";\n                        } else {\n                            tableColumn.default = dbColumn[\"column_default\"].replace(/::.*/, \"\");\n                        }\n                    }\n\n                    tableColumn.comment = \"\"; // dbColumn[\"COLUMN_COMMENT\"];\n                    if (dbColumn[\"character_set_name\"])\n                        tableColumn.charset = dbColumn[\"character_set_name\"];\n                    if (dbColumn[\"collation_name\"])\n                        tableColumn.collation = dbColumn[\"collation_name\"];\n                    return tableColumn;\n                }));\n\n            // find unique constraints of table, group them by constraint name and build TableUnique.\n            const tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter(dbConstraint => {\n                return this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n                    && dbConstraint[\"constraint_type\"] === \"UNIQUE\";\n            }), dbConstraint => dbConstraint[\"constraint_name\"]);\n\n            table.uniques = tableUniqueConstraints.map(constraint => {\n                const uniques = dbConstraints.filter(dbC => dbC[\"constraint_name\"] === constraint[\"constraint_name\"]);\n                return new TableUnique({\n                    name: constraint[\"constraint_name\"],\n                    columnNames: uniques.map(u => u[\"column_name\"])\n                });\n            });\n\n            // find check constraints of table, group them by constraint name and build TableCheck.\n            const tableCheckConstraints = OrmUtils.uniq(dbConstraints.filter(dbConstraint => {\n                return this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n                    && dbConstraint[\"constraint_type\"] === \"CHECK\";\n            }), dbConstraint => dbConstraint[\"constraint_name\"]);\n\n            table.checks = tableCheckConstraints.map(constraint => {\n                const checks = dbConstraints.filter(dbC => dbC[\"constraint_name\"] === constraint[\"constraint_name\"]);\n                return new TableCheck({\n                    name: constraint[\"constraint_name\"],\n                    columnNames: checks.map(c => c[\"column_name\"]),\n                    expression: constraint[\"expression\"] // column names are not escaped, may cause problems\n                });\n            });\n\n            // find exclusion constraints of table, group them by constraint name and build TableExclusion.\n            const tableExclusionConstraints = OrmUtils.uniq(dbConstraints.filter(dbConstraint => {\n                return this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n                    && dbConstraint[\"constraint_type\"] === \"EXCLUDE\";\n            }), dbConstraint => dbConstraint[\"constraint_name\"]);\n\n            table.exclusions = tableExclusionConstraints.map(constraint => {\n                return new TableExclusion({\n                    name: constraint[\"constraint_name\"],\n                    expression: constraint[\"expression\"].substring(8) // trim EXCLUDE from start of expression\n                });\n            });\n\n            // find foreign key constraints of table, group them by constraint name and build TableForeignKey.\n            const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter(dbForeignKey => {\n                return this.driver.buildTableName(dbForeignKey[\"table_name\"], dbForeignKey[\"table_schema\"]) === tableFullName;\n            }), dbForeignKey => dbForeignKey[\"constraint_name\"]);\n\n            table.foreignKeys = tableForeignKeyConstraints.map(dbForeignKey => {\n                const foreignKeys = dbForeignKeys.filter(dbFk => dbFk[\"constraint_name\"] === dbForeignKey[\"constraint_name\"]);\n\n                // if referenced table located in currently used schema, we don't need to concat schema name to table name.\n                const schema = dbForeignKey[\"referenced_table_schema\"] === currentSchema ? undefined : dbTable[\"referenced_table_schema\"];\n                const referencedTableName = this.driver.buildTableName(dbForeignKey[\"referenced_table_name\"], schema);\n\n                return new TableForeignKey({\n                    name: dbForeignKey[\"constraint_name\"],\n                    columnNames: foreignKeys.map(dbFk => dbFk[\"column_name\"]),\n                    referencedTableName: referencedTableName,\n                    referencedColumnNames: foreignKeys.map(dbFk => dbFk[\"referenced_column_name\"]),\n                    onDelete: dbForeignKey[\"on_delete\"],\n                    onUpdate: dbForeignKey[\"on_update\"],\n                    deferrable: dbForeignKey[\"deferrable\"] ? dbForeignKey[\"deferred\"] : undefined,\n                });\n            });\n\n            // find index constraints of table, group them by constraint name and build TableIndex.\n            const tableIndexConstraints = OrmUtils.uniq(dbIndices.filter(dbIndex => {\n                return this.driver.buildTableName(dbIndex[\"table_name\"], dbIndex[\"table_schema\"]) === tableFullName;\n            }), dbIndex => dbIndex[\"constraint_name\"]);\n\n            table.indices = tableIndexConstraints.map(constraint => {\n                const indices = dbIndices.filter(index => {\n                    return index[\"table_schema\"] === constraint[\"table_schema\"]\n                        && index[\"table_name\"] === constraint[\"table_name\"]\n                        && index[\"constraint_name\"] === constraint[\"constraint_name\"];\n                });\n                return new TableIndex(<TableIndexOptions>{\n                    table: table,\n                    name: constraint[\"constraint_name\"],\n                    columnNames: indices.map(i => i[\"column_name\"]),\n                    isUnique: constraint[\"is_unique\"] === \"TRUE\",\n                    where: constraint[\"condition\"],\n                    isSpatial: indices.every(i => this.driver.spatialTypes.indexOf(i[\"type_name\"]) >= 0),\n                    isFulltext: false\n                });\n            });\n\n            return table;\n        }));\n    }\n\n    /**\n     * Builds create table sql.\n     */\n    protected createTableSql(table: Table, createForeignKeys?: boolean): Query {\n        const columnDefinitions = table.columns.map(column => this.buildCreateColumnSql(table, column)).join(\", \");\n        let sql = `CREATE TABLE ${this.escapePath(table)} (${columnDefinitions}`;\n\n        table.columns\n            .filter(column => column.isUnique)\n            .forEach(column => {\n                const isUniqueExist = table.uniques.some(unique => unique.columnNames.length === 1 && unique.columnNames[0] === column.name);\n                if (!isUniqueExist)\n                    table.uniques.push(new TableUnique({\n                        name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n                        columnNames: [column.name]\n                    }));\n            });\n\n        if (table.uniques.length > 0) {\n            const uniquesSql = table.uniques.map(unique => {\n                const uniqueName = unique.name ? unique.name : this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n                const columnNames = unique.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n                return `CONSTRAINT \"${uniqueName}\" UNIQUE (${columnNames})`;\n            }).join(\", \");\n\n            sql += `, ${uniquesSql}`;\n        }\n\n        if (table.checks.length > 0) {\n            const checksSql = table.checks.map(check => {\n                const checkName = check.name ? check.name : this.connection.namingStrategy.checkConstraintName(table.name, check.expression!);\n                return `CONSTRAINT \"${checkName}\" CHECK (${check.expression})`;\n            }).join(\", \");\n\n            sql += `, ${checksSql}`;\n        }\n\n        if (table.exclusions.length > 0) {\n            const exclusionsSql = table.exclusions.map(exclusion => {\n                const exclusionName = exclusion.name ? exclusion.name : this.connection.namingStrategy.exclusionConstraintName(table.name, exclusion.expression!);\n                return `CONSTRAINT \"${exclusionName}\" EXCLUDE ${exclusion.expression}`;\n            }).join(\", \");\n\n            sql += `, ${exclusionsSql}`;\n        }\n\n        if (table.foreignKeys.length > 0 && createForeignKeys) {\n            const foreignKeysSql = table.foreignKeys.map(fk => {\n                const columnNames = fk.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n                if (!fk.name)\n                    fk.name = this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames);\n                const referencedColumnNames = fk.referencedColumnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n\n                let constraint = `CONSTRAINT \"${fk.name}\" FOREIGN KEY (${columnNames}) REFERENCES ${this.escapePath(fk.referencedTableName)} (${referencedColumnNames})`;\n                if (fk.onDelete)\n                    constraint += ` ON DELETE ${fk.onDelete}`;\n                if (fk.onUpdate)\n                    constraint += ` ON UPDATE ${fk.onUpdate}`;\n                if (fk.deferrable)\n                    constraint += ` DEFERRABLE ${fk.deferrable}`;\n\n                return constraint;\n            }).join(\", \");\n\n            sql += `, ${foreignKeysSql}`;\n        }\n\n        const primaryColumns = table.columns.filter(column => column.isPrimary);\n        if (primaryColumns.length > 0) {\n            const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, primaryColumns.map(column => column.name));\n            const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            sql += `, CONSTRAINT \"${primaryKeyName}\" PRIMARY KEY (${columnNames})`;\n        }\n\n        sql += `)`;\n\n        return new Query(sql);\n    }\n\n    /**\n     * Builds drop table sql.\n     */\n    protected dropTableSql(tableOrPath: Table|string): Query {\n        return new Query(`DROP TABLE ${this.escapePath(tableOrPath)}`);\n    }\n\n    protected createViewSql(view: View): Query {\n        if (typeof view.expression === \"string\") {\n            return new Query(`CREATE VIEW ${this.escapePath(view)} AS ${view.expression}`);\n        } else {\n            return new Query(`CREATE VIEW ${this.escapePath(view)} AS ${view.expression(this.connection).getQuery()}`);\n        }\n    }\n\n    protected async insertViewDefinitionSql(view: View): Promise<Query> {\n        const currentSchemaQuery = await this.query(`SELECT * FROM current_schema()`);\n        const currentSchema = currentSchemaQuery[0][\"current_schema\"];\n        const splittedName = view.name.split(\".\");\n        let schema = this.driver.options.schema || currentSchema;\n        let name = view.name;\n        if (splittedName.length === 2) {\n            schema = splittedName[0];\n            name = splittedName[1];\n        }\n\n        const expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n        const [query, parameters] = this.connection.createQueryBuilder()\n            .insert()\n            .into(this.getTypeormMetadataTableName())\n            .values({ type: \"VIEW\", schema: schema, name: name, value: expression })\n            .getQueryAndParameters();\n\n        return new Query(query, parameters);\n    }\n\n    /**\n     * Builds drop view sql.\n     */\n    protected dropViewSql(viewOrPath: View|string): Query {\n        return new Query(`DROP VIEW ${this.escapePath(viewOrPath)}`);\n    }\n\n    /**\n     * Builds remove view sql.\n     */\n    protected async deleteViewDefinitionSql(viewOrPath: View|string): Promise<Query> {\n        const currentSchemaQuery = await this.query(`SELECT * FROM current_schema()`);\n        const currentSchema = currentSchemaQuery[0][\"current_schema\"];\n        const viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n        const splittedName = viewName.split(\".\");\n        let schema = this.driver.options.schema || currentSchema;\n        let name = viewName;\n        if (splittedName.length === 2) {\n            schema = splittedName[0];\n            name = splittedName[1];\n        }\n\n        const qb = this.connection.createQueryBuilder();\n        const [query, parameters] = qb.delete()\n            .from(this.getTypeormMetadataTableName())\n            .where(`${qb.escape(\"type\")} = 'VIEW'`)\n            .andWhere(`${qb.escape(\"schema\")} = :schema`, { schema })\n            .andWhere(`${qb.escape(\"name\")} = :name`, { name })\n            .getQueryAndParameters();\n\n        return new Query(query, parameters);\n    }\n\n    /**\n     * Extracts schema name from given Table object or table name string.\n     */\n    protected extractSchema(target: Table|string): string|undefined {\n        const tableName = target instanceof Table ? target.name : target;\n        return tableName.indexOf(\".\") === -1 ? this.driver.options.schema : tableName.split(\".\")[0];\n    }\n\n    /**\n     * Drops ENUM type from given schemas.\n     */\n    protected async dropEnumTypes(schemaNames: string): Promise<void> {\n        const selectDropsQuery = `SELECT 'DROP TYPE IF EXISTS \"' || n.nspname || '\".\"' || t.typname || '\" CASCADE;' as \"query\" FROM \"pg_type\" \"t\" ` +\n            `INNER JOIN \"pg_enum\" \"e\" ON \"e\".\"enumtypid\" = \"t\".\"oid\" ` +\n            `INNER JOIN \"pg_namespace\" \"n\" ON \"n\".\"oid\" = \"t\".\"typnamespace\" ` +\n            `WHERE \"n\".\"nspname\" IN (${schemaNames}) GROUP BY \"n\".\"nspname\", \"t\".\"typname\"`;\n        const dropQueries: ObjectLiteral[] = await this.query(selectDropsQuery);\n        await Promise.all(dropQueries.map(q => this.query(q[\"query\"])));\n    }\n\n    /**\n     * Checks if enum with the given name exist in the database.\n     */\n    protected async hasEnumType(table: Table, column: TableColumn): Promise<boolean> {\n        const schema = this.parseTableName(table).schema;\n        const enumName = this.buildEnumName(table, column, false, true);\n        const sql = `SELECT \"n\".\"nspname\", \"t\".\"typname\" FROM \"pg_type\" \"t\" ` +\n            `INNER JOIN \"pg_namespace\" \"n\" ON \"n\".\"oid\" = \"t\".\"typnamespace\" ` +\n            `WHERE \"n\".\"nspname\" = ${schema} AND \"t\".\"typname\" = '${enumName}'`;\n        const result = await this.query(sql);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Builds create ENUM type sql.\n     */\n    protected createEnumTypeSql(table: Table, column: TableColumn, enumName?: string): Query {\n        if (!enumName)\n            enumName = this.buildEnumName(table, column);\n        const enumValues = column.enum!.map(value => `'${value}'`).join(\", \");\n        return new Query(`CREATE TYPE ${enumName} AS ENUM(${enumValues})`);\n    }\n\n    /**\n     * Builds create ENUM type sql.\n     */\n    protected dropEnumTypeSql(table: Table, column: TableColumn, enumName?: string): Query {\n        if (!enumName)\n            enumName = this.buildEnumName(table, column);\n        return new Query(`DROP TYPE ${enumName}`);\n    }\n\n    /**\n     * Builds create index sql.\n     */\n    protected createIndexSql(table: Table, index: TableIndex): Query {\n        const columns = index.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        return new Query(`CREATE ${index.isUnique ? \"UNIQUE \" : \"\"}INDEX \"${index.name}\" ON ${this.escapePath(table)} ${index.isSpatial ? \"USING GiST \" : \"\"}(${columns}) ${index.where ? \"WHERE \" + index.where : \"\"}`);\n    }\n\n    /**\n     * Builds drop index sql.\n     */\n    protected dropIndexSql(table: Table, indexOrName: TableIndex|string): Query {\n        let indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n        const schema = this.extractSchema(table);\n        return schema ? new Query(`DROP INDEX \"${schema}\".\"${indexName}\"`) : new Query(`DROP INDEX \"${indexName}\"`);\n    }\n\n    /**\n     * Builds create primary key sql.\n     */\n    protected createPrimaryKeySql(table: Table, columnNames: string[]): Query {\n        const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n        const columnNamesString = columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        return new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${primaryKeyName}\" PRIMARY KEY (${columnNamesString})`);\n    }\n\n    /**\n     * Builds drop primary key sql.\n     */\n    protected dropPrimaryKeySql(table: Table): Query {\n        const columnNames = table.primaryColumns.map(column => column.name);\n        const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${primaryKeyName}\"`);\n    }\n\n    /**\n     * Builds create unique constraint sql.\n     */\n    protected createUniqueConstraintSql(table: Table, uniqueConstraint: TableUnique): Query {\n        const columnNames = uniqueConstraint.columnNames.map(column => `\"` + column + `\"`).join(\", \");\n        return new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (${columnNames})`);\n    }\n\n    /**\n     * Builds drop unique constraint sql.\n     */\n    protected dropUniqueConstraintSql(table: Table, uniqueOrName: TableUnique|string): Query {\n        const uniqueName = uniqueOrName instanceof TableUnique ? uniqueOrName.name : uniqueOrName;\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${uniqueName}\"`);\n    }\n\n    /**\n     * Builds create check constraint sql.\n     */\n    protected createCheckConstraintSql(table: Table, checkConstraint: TableCheck): Query {\n        return new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${checkConstraint.name}\" CHECK (${checkConstraint.expression})`);\n    }\n\n    /**\n     * Builds drop check constraint sql.\n     */\n    protected dropCheckConstraintSql(table: Table, checkOrName: TableCheck|string): Query {\n        const checkName = checkOrName instanceof TableCheck ? checkOrName.name : checkOrName;\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${checkName}\"`);\n    }\n\n    /**\n     * Builds create exclusion constraint sql.\n     */\n    protected createExclusionConstraintSql(table: Table, exclusionConstraint: TableExclusion): Query {\n        return new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${exclusionConstraint.name}\" EXCLUDE ${exclusionConstraint.expression}`);\n    }\n\n    /**\n     * Builds drop exclusion constraint sql.\n     */\n    protected dropExclusionConstraintSql(table: Table, exclusionOrName: TableExclusion|string): Query {\n        const exclusionName = exclusionOrName instanceof TableExclusion ? exclusionOrName.name : exclusionOrName;\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${exclusionName}\"`);\n    }\n\n    /**\n     * Builds create foreign key sql.\n     */\n    protected createForeignKeySql(table: Table, foreignKey: TableForeignKey): Query {\n        const columnNames = foreignKey.columnNames.map(column => `\"` + column + `\"`).join(\", \");\n        const referencedColumnNames = foreignKey.referencedColumnNames.map(column => `\"` + column + `\"`).join(\",\");\n        let sql = `ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \"${foreignKey.name}\" FOREIGN KEY (${columnNames}) ` +\n            `REFERENCES ${this.escapePath(foreignKey.referencedTableName)}(${referencedColumnNames})`;\n        if (foreignKey.onDelete)\n            sql += ` ON DELETE ${foreignKey.onDelete}`;\n        if (foreignKey.onUpdate)\n            sql += ` ON UPDATE ${foreignKey.onUpdate}`;\n        if (foreignKey.deferrable)\n            sql += ` DEFERRABLE ${foreignKey.deferrable}`;\n\n        return new Query(sql);\n    }\n\n    /**\n     * Builds drop foreign key sql.\n     */\n    protected dropForeignKeySql(table: Table, foreignKeyOrName: TableForeignKey|string): Query {\n        const foreignKeyName = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName.name : foreignKeyOrName;\n        return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT \"${foreignKeyName}\"`);\n    }\n\n    /**\n     * Builds sequence name from given table and column.\n     */\n    protected buildSequenceName(table: Table, columnOrName: TableColumn|string, currentSchema?: string, disableEscape?: true, skipSchema?: boolean): string {\n        const columnName = columnOrName instanceof TableColumn ? columnOrName.name : columnOrName;\n        let schema: string|undefined = undefined;\n        let tableName: string|undefined = undefined;\n\n        if (table.name.indexOf(\".\") === -1) {\n            tableName = table.name;\n        } else {\n            schema = table.name.split(\".\")[0];\n            tableName = table.name.split(\".\")[1];\n        }\n\n        if (schema && schema !== currentSchema && !skipSchema) {\n            return disableEscape ? `${schema}.${tableName}_${columnName}_seq` : `\"${schema}\".\"${tableName}_${columnName}_seq\"`;\n\n        } else {\n            return disableEscape ? `${tableName}_${columnName}_seq` : `\"${tableName}_${columnName}_seq\"`;\n        }\n    }\n\n    /**\n     * Builds ENUM type name from given table and column.\n     */\n    protected buildEnumName(table: Table, columnOrName: TableColumn|string, withSchema: boolean = true, disableEscape?: boolean, toOld?: boolean): string {\n        const columnName = columnOrName instanceof TableColumn ? columnOrName.name : columnOrName;\n        const schema = table.name.indexOf(\".\") === -1 ? this.driver.options.schema : table.name.split(\".\")[0];\n        const tableName = table.name.indexOf(\".\") === -1 ? table.name : table.name.split(\".\")[1];\n        let enumName = schema && withSchema ? `${schema}.${tableName}_${columnName.toLowerCase()}_enum` : `${tableName}_${columnName.toLowerCase()}_enum`;\n        if (toOld)\n            enumName = enumName + \"_old\";\n        return enumName.split(\".\").map(i => {\n            return disableEscape ? i : `\"${i}\"`;\n        }).join(\".\");\n    }\n\n    protected async getEnumTypeName(table: Table, column: TableColumn) {\n        const currentSchemaQuery = await this.query(`SELECT * FROM current_schema()`);\n        const currentSchema = currentSchemaQuery[0][\"current_schema\"];\n        let [schema, name] = table.name.split(\".\");\n        if (!name) {\n            name = schema;\n            schema = this.driver.options.schema || currentSchema;\n        }\n        const result = await this.query(`SELECT \"udt_schema\", \"udt_name\" ` +\n            `FROM \"information_schema\".\"columns\" WHERE \"table_schema\" = '${schema}' AND \"table_name\" = '${name}' AND \"column_name\"='${column.name}'`);\n        return {\n            enumTypeSchema: result[0][\"udt_schema\"],\n            enumTypeName: result[0][\"udt_name\"]\n        };\n    }\n\n    /**\n     * Escapes given table or view path.\n     */\n    protected escapePath(target: Table|View|string, disableEscape?: boolean): string {\n        let tableName = target instanceof Table || target instanceof View ? target.name : target;\n        tableName = tableName.indexOf(\".\") === -1 && this.driver.options.schema ? `${this.driver.options.schema}.${tableName}` : tableName;\n\n        return tableName.split(\".\").map(i => {\n            return disableEscape ? i : `\"${i}\"`;\n        }).join(\".\");\n    }\n\n    /**\n     * Returns object with table schema and table name.\n     */\n    protected parseTableName(target: Table|string) {\n        const tableName = target instanceof Table ? target.name : target;\n        if (tableName.indexOf(\".\") === -1) {\n            return {\n                schema: this.driver.options.schema ? `'${this.driver.options.schema}'` : \"current_schema()\",\n                tableName: `'${tableName}'`\n            };\n        } else {\n            return {\n                schema: `'${tableName.split(\".\")[0]}'`,\n                tableName: `'${tableName.split(\".\")[1]}'`\n            };\n        }\n    }\n\n    /**\n     * Builds a query for create column.\n     */\n    protected buildCreateColumnSql(table: Table, column: TableColumn) {\n        let c = \"\\\"\" + column.name + \"\\\"\";\n        if (column.isGenerated === true && column.generationStrategy !== \"uuid\") {\n            if (column.type === \"integer\" || column.type === \"int\" || column.type === \"int4\")\n                c += \" SERIAL\";\n            if (column.type === \"smallint\" || column.type === \"int2\")\n                c += \" SMALLSERIAL\";\n            if (column.type === \"bigint\" || column.type === \"int8\")\n                c += \" BIGSERIAL\";\n        }\n        if (column.type === \"enum\" || column.type === \"simple-enum\") {\n            c += \" \" + this.buildEnumName(table, column);\n            if (column.isArray)\n                c += \" array\";\n\n        } else if (!column.isGenerated || column.type === \"uuid\") {\n            c += \" \" + this.connection.driver.createFullType(column);\n        }\n        if (column.charset)\n            c += \" CHARACTER SET \\\"\" + column.charset + \"\\\"\";\n        if (column.collation)\n            c += \" COLLATE \\\"\" + column.collation + \"\\\"\";\n        if (column.isNullable !== true)\n            c += \" NOT NULL\";\n        if (column.default !== undefined && column.default !== null)\n            c += \" DEFAULT \" + column.default;\n        if (column.isGenerated && column.generationStrategy === \"uuid\" && !column.default)\n            c += ` DEFAULT ${this.driver.uuidGenerator}`;\n\n        return c;\n    }\n\n}\n"],"sourceRoot":"../.."}