import psycopg2 import traceback # Change the table here to something the user can create tables in ... db = psycopg2.connect('dbname=test') cursor = db.cursor() print 'Creating tables and sample data' cursor.execute(''' CREATE TEMPORARY TABLE foo ( id int PRIMARY KEY )''') cursor.execute(''' CREATE TEMPORARY TABLE bar ( id int PRIMARY KEY, foo_id int, CONSTRAINT bar_foo_fk FOREIGN KEY (foo_id) REFERENCES foo(id) DEFERRABLE )''') cursor.execute('INSERT INTO foo VALUES (1)') cursor.execute('INSERT INTO bar VALUES (1, 1)') db.commit() print 'Deferring constraint and breaking referential integrity' cursor.execute('SET CONSTRAINTS bar_foo_fk DEFERRED') cursor.execute('UPDATE bar SET foo_id = 42 WHERE id = 1') print 'Committing (this should fail)' try: db.commit() except: traceback.print_exc() print 'Rolling back connection' db.rollback() print 'Running a trivial query' try: cursor.execute('SELECT TRUE') except: traceback.print_exc() print 'db.closed:', db.closed