Re: BUG #16290: Unable to run \set AUTOCOMMIT off

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.

In response to

Browse pgsql-bugs by date

  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