aboutsummaryrefslogtreecommitdiff
path: root/src/exchangedb/plugin_exchangedb_postgres.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/exchangedb/plugin_exchangedb_postgres.c')
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index c80f3370..507a2c66 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -7949,7 +7949,22 @@ postgres_start_deferred_wire_out (void *cls)
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_ExecuteStatement es[] = {
GNUNET_PQ_make_execute ("START TRANSACTION ISOLATION LEVEL READ COMMITTED"),
- GNUNET_PQ_make_try_execute ("SET CONSTRAINTS wire_out_ref DEFERRED"),
+ GNUNET_PQ_make_execute ("DO $$"
+ "BEGIN"
+ " IF EXISTS ("
+ " SELECT 1"
+ " FROM information_Schema.constraint_column_usage"
+ " WHERE table_name='wire_out'"
+ " AND constraint_name='wire_out_ref')"
+ " THEN "
+ " SET CONSTRAINTS wire_out_ref DEFERRED;"
+ " END IF;"
+ "END $$"),
+ // FIXME: above logic is better as it tests that the constraint
+ // is actually applicable; but maybe we want to drop the constraint
+ // entirely once do_gc() is fixed to do without it?
+ // GNUNET_PQ_make_execute ("CALL defer_wire_out()"),
+ // GNUNET_PQ_make_execute ("SET CONSTRAINTS wire_out_ref DEFERRED;"),
GNUNET_PQ_EXECUTE_STATEMENT_END
};