From b6288f841b01c4419f5441c184898750bc20df91 Mon Sep 17 00:00:00 2001 From: Pistos Date: Tue, 11 Oct 2011 16:54:03 -0400 Subject: [PATCH] Allow Cucumber tests to run with PostgreSQL with a non-root user. --- features/support/database_cleaner_patches.rb | 22 +++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/features/support/database_cleaner_patches.rb b/features/support/database_cleaner_patches.rb index 4c9783bdc..5b9c883cb 100644 --- a/features/support/database_cleaner_patches.rb +++ b/features/support/database_cleaner_patches.rb @@ -2,6 +2,26 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. +# disable_referential_integrity doesn't work when using PostgreSQL +# with a non-root user. +# See http://kopongo.com/2008/7/25/postgres-ri_constrainttrigger-error +module ActiveRecord + module ConnectionAdapters + class PostgreSQLAdapter < AbstractAdapter + def disable_referential_integrity(&block) + transaction { + begin + execute "SET CONSTRAINTS ALL DEFERRED" + yield + ensure + execute "SET CONSTRAINTS ALL IMMEDIATE" + end + } + end + end + end +end + DatabaseCleaner::ActiveRecord::Truncation.class_eval do # You could argue that this technically isn't truncation. You'd be right. # But something in the MySQL adapter segfaults (!) on actual truncation, and we @@ -13,4 +33,4 @@ DatabaseCleaner::ActiveRecord::Truncation.class_eval do end end end -end \ No newline at end of file +end