summaryrefslogtreecommitdiff
path: root/sandbox/trigger-commit-fail.py
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/trigger-commit-fail.py')
-rw-r--r--sandbox/trigger-commit-fail.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/sandbox/trigger-commit-fail.py b/sandbox/trigger-commit-fail.py
new file mode 100644
index 0000000..98b23ae
--- /dev/null
+++ b/sandbox/trigger-commit-fail.py
@@ -0,0 +1,44 @@
+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