commit 2b4f259d5de3dfc772fdcb7caa29fb85e9f42cf6
parent a17d7490889f141ae0a03177a8d0caee5faebf1c
Author: Christian Grothoff <christian@grothoff.org>
Date: Mon, 12 Oct 2026 17:23:13 +0200
ON CONFLICT does not work for partitioned DB schema, use UPDATE + INSERT instead
Diffstat:
1 file changed, 50 insertions(+), 41 deletions(-)
diff --git a/src/exchangedb/do_reserve_legitimization_process.sql b/src/exchangedb/do_reserve_legitimization_process.sql
@@ -71,51 +71,60 @@ BEGIN
AND provider_name=in_provider_name
AND NOT finished;
- INSERT INTO legitimization_processes
- (h_payto,
- start_time,
- process_expiration_time,
- expiration_time,
- provider_name,
- provider_user_id,
- provider_legitimization_id,
- redirect_url,
- finished,
- legitimization_measure_serial_id,
- measure_index,
- error_code,
- error_message)
- VALUES
- (in_h_payto,
- in_now,
- in_lease_expiration,
- 0,
- in_provider_name,
- NULL,
- NULL,
- NULL,
- FALSE,
- in_legitimization_measure_serial_id,
- in_measure_index,
- 0,
- NULL)
- ON CONFLICT (legitimization_measure_serial_id,measure_index)
- DO UPDATE SET
- h_payto=in_h_payto,
- start_time=in_now,
- process_expiration_time=in_lease_expiration,
- expiration_time=0,
- provider_name=in_provider_name,
- provider_user_id=NULL,
- provider_legitimization_id=NULL,
- redirect_url=NULL,
- finished=FALSE,
- error_code=0,
- error_message=NULL
+ UPDATE legitimization_processes
+ SET h_payto=in_h_payto
+ ,start_time=in_now
+ ,process_expiration_time=in_lease_expiration
+ ,expiration_time=0
+ ,provider_name=in_provider_name
+ ,provider_user_id=NULL
+ ,provider_legitimization_id=NULL
+ ,redirect_url=NULL
+ ,finished=FALSE
+ ,error_code=0
+ ,error_message=NULL
+ WHERE legitimization_measure_serial_id=in_legitimization_measure_serial_id
+ AND measure_index=in_measure_index
RETURNING legitimization_process_serial_id,
start_time
INTO out_process_row,
out_start_time;
+
+ IF NOT FOUND
+ THEN
+ INSERT INTO legitimization_processes
+ (h_payto
+ ,start_time
+ ,process_expiration_time
+ ,expiration_time
+ ,provider_name
+ ,provider_user_id
+ ,provider_legitimization_id
+ ,redirect_url
+ ,finished
+ ,legitimization_measure_serial_id
+ ,measure_index
+ ,error_code
+ ,error_message
+ ) VALUES
+ (in_h_payto
+ ,in_now
+ ,in_lease_expiration
+ ,0
+ ,in_provider_name
+ ,NULL
+ ,NULL
+ ,NULL
+ ,FALSE
+ ,in_legitimization_measure_serial_id
+ ,in_measure_index
+ ,0
+ ,NULL)
+ RETURNING legitimization_process_serial_id,
+ start_time
+ INTO out_process_row,
+ out_start_time;
+ END IF;
out_redirect_url=NULL;
out_state=1;
END $$;