On 10/20/2014 12:03 PM, Tom Lane wrote:
> Victor Yegorov <vyegorov@gmail.com> writes:
>> 2014-10-20 21:43 GMT+03:00 Adrian Klaver <adrian.klaver@aklaver.com>:
>>> With \set AUTOCOMMIT off the COMMIT ended one transaction block and
>>> started another.
>
>> I don't think `COMMIT` starts a new transaction block here,
>> as I can run `VACUUM` after it, and vacuum also cannot be run inside
>> transaction block.
>
> psql knows not to issue BEGIN before a VACUUM command. It doesn't
> know that about ALTER TYPE ... ADD VALUE.
I did some testing with Victors examples and I came away confused(:
Tested on:
test=> select version();
version
-----------------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.3.5 on i686-pc-linux-gnu, compiled by gcc (SUSE Linux)
4.8.1 20130909 [gcc-4_8-branch revision 202388], 32-bit
test=> \set AUTOCOMMIT on;
unrecognized Boolean value; assuming "on"
test=> \set
AUTOCOMMIT = 'on;'
test=> \set AUTOCOMMIT off;
unrecognized Boolean value; assuming "on"
test=> \set
AUTOCOMMIT = 'off;'
Not sure how assuming on becomes off?
This is the same if I quote the values.
http://www.postgresql.org/docs/9.3/interactive/app-psql.html#APP-PSQL-VARIABLES
AUTOCOMMIT
The autocommit-off mode works by issuing an implicit BEGIN for you, just
before any command that is not already in a transaction block and is not
itself a BEGIN or other transaction-control command, nor a command that
cannot be executed inside a transaction block (such as VACUUM).
The above would seem to imply it should work, in contrast to what I
originally said.
>
> regards, tom lane
>
>
--
Adrian Klaver
adrian.klaver@aklaver.com