From: | "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> |
---|---|
To: | "apoorvmalik(dot)appy(at)gmail(dot)com" <apoorvmalik(dot)appy(at)gmail(dot)com>, "pgsql-bugs(at)lists(dot)postgresql(dot)org" <pgsql-bugs(at)lists(dot)postgresql(dot)org> |
Subject: | Re: BUG #16290: Unable to run \set AUTOCOMMIT off |
Date: | 2020-03-10 06:26:57 |
Message-ID: | CAKFQuwaK3TX4pAApMe7=9S=CU0fdQX0B38NOFsOUFpgwyaTMCw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Monday, March 9, 2020, PG Bug reporting form <noreply(at)postgresql(dot)org>
wrote:
> The following bug has been logged on the website:
>
> Bug reference: 16290
> Logged by: apoorv malik
> Email address: apoorvmalik(dot)appy(at)gmail(dot)com
> PostgreSQL version: 11.6
> Operating system: Linux
> Description:
>
> Hi,
> I'm using Liquibase and trying to run multiple sql files. In the first sql
> file, I want to define '\set AUTOCOMMIT off' so that I can rollback.
> This will be used for testing. Unfortunately, I can't use BEGIN; as there
> are multiple files and can't be combined to one else Liquibase will not
> have
> separate entries.
>
> Could you please give me equivalent command for \set AUTOCOMMIT off --> I
> have tried all types of escaping but nothing seems to work.
>
> set AUTOCOMMIT = off -->this works fine in Liquibase but fails at DB
>
> Here's the error:
>
> Reason: liquibase.exception.DatabaseException: ERROR: syntax error at or
> near "\"
> Position: 1 [Failed SQL: (0) \set AUTOCOMMIT off]
> at liquibase.changelog.ChangeSet.execute(ChangeSet.java:646)
> at liquibase.changelog.visitor.UpdateVisitor.visit(
> UpdateVisitor.java:53)
> at liquibase.changelog.ChangeLogIterator.run(
> ChangeLogIterator.java:83)
> at liquibase.Liquibase.update(Liquibase.java:202)
> at liquibase.Liquibase.update(Liquibase.java:179)
> at liquibase.integration.commandline.Main.doMigration(
> Main.java:1399)
> at liquibase.integration.commandline.Main.run(Main.java:229)
> at liquibase.integration.commandline.Main.main(Main.java:143)
> Caused by: liquibase.exception.DatabaseException: ERROR: syntax error at
> or
> near "\"
> Position: 1 [Failed SQL: (0) \set AUTOCOMMIT off]
> at
> liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.
> doInStatement(JdbcExecutor.java:402)
> at liquibase.executor.jvm.JdbcExecutor.execute(
> JdbcExecutor.java:59)
> at liquibase.executor.jvm.JdbcExecutor.execute(
> JdbcExecutor.java:131)
> at
> liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:
> 1274)
> at
> liquibase.database.AbstractJdbcDatabase.executeStatements(
> AbstractJdbcDatabase.java:1256)
> at liquibase.changelog.ChangeSet.execute(ChangeSet.java:609)
> ... 7 common frames omitted
> Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or
> near
> "\"
> Position: 1
> at
> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(
> QueryExecutorImpl.java:2440)
> at
> org.postgresql.core.v3.QueryExecutorImpl.processResults(
> QueryExecutorImpl.java:2183)
> at
> org.postgresql.core.v3.QueryExecutorImpl.execute(
> QueryExecutorImpl.java:308)
> at org.postgresql.jdbc.PgStatement.executeInternal(
> PgStatement.java:441)
> at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365)
> at org.postgresql.jdbc.PgStatement.executeWithFlags(
> PgStatement.java:307)
> at org.postgresql.jdbc.PgStatement.executeCachedSql(
> PgStatement.java:293)
> at org.postgresql.jdbc.PgStatement.executeWithFlags(
> PgStatement.java:270)
> at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:266)
> at
> liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.
> doInStatement(JdbcExecutor.java:398)
> ... 12 common frames omitted
>
>
This is not a bug.
Server doesn’t have session-level auto-commit toggling options (as such,
you can send sql begin to avoid the default auto-commit) so sending a
command to it to control session behavior is not possible. Clients can
provide their own auto-commit mode with client-specific means of
controlling it. In this case \set is the psql client’s configuration
command (i.e, it only works if you are using psql). You need to figure out
what will work in your environment. JDBC has a setAutoCommit method on the
connection, be a good place to start. Or the LiquiBase documentation...
David J.
From | Date | Subject | |
---|---|---|---|
Next Message | Daniel Gustafsson | 2020-03-10 09:12:34 | Re: BUG #16289: no installation data folder, launch deamon |
Previous Message | PG Bug reporting form | 2020-03-10 05:40:15 | BUG #16290: Unable to run \set AUTOCOMMIT off |