Why do you say truncate is non-transactional? Something simple proves that it's not?
wells=# create table foo (f text);
wells=# insert into foo values('cat');
INSERT 0 1
wells=# select * from foo;
f
-----
cat
(1 row)
wells=# begin;
BEGIN
wells=*# truncate foo;
TRUNCATE TABLE
wells=*# rollback;
ROLLBACK
wells=# select * from foo;
f
-----
cat
(1 row)
wells=# insert into foo values('cat');
INSERT 0 1
wells=# select * from foo;
f
-----
cat
(1 row)
wells=# begin;
BEGIN
wells=*# truncate foo;
TRUNCATE TABLE
wells=*# rollback;
ROLLBACK
wells=# select * from foo;
f
-----
cat
(1 row)
On Wed, Nov 9, 2022 at 5:16 PM Wael Khobalatte <wael@xxxxxxxxx> wrote:
> I've noticed serials still maintain incremented values even when a transaction is rolled back. Are there other similar persistent changes to be aware of?
Postgres sequences (what backs the serial type) are non-transactional. nextval, setval, et al. Truncate is also non-transactional.
Wells Oliver
wells.oliver@xxxxxxxxx
wells.oliver@xxxxxxxxx