marten: Migration to v4 issue, Primary Key is not updated in document table

Hi, recently i tried an upgrade to version: Alpha 11 (also r1 and r2). I have following issue in upsert: Basically it tells: There isnt contraint: pk_mt_doc_transit for table: mt_doc_transit

But its not really true, constraint exists but its named in following syntax: mt_doc_transit_pkey


2021-07-06 16:41:49.6762|ERROR|LibRtDb.Services.TransitsService|Marten.Exceptions.MartenCommandException: Marten Command Failure:$ select parko_rts.mt_upsert_transit(:p0, :p1, :p2, :p3);$ $ 42704: il vincolo "pk_mt_doc_transit" per la tabella "mt_doc_transit" non esiste ---> Npgsql.PostgresException (0x80004005): 42704: il vincolo "pk_mt_doc_transit" per la tabella "mt_doc_transit" non esiste at Npgsql.NpgsqlConnector.<ReadMessage>g__ReadMessageLong|194_0(NpgsqlConnector connector, Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage) at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken) at Npgsql.NpgsqlDataReader.NextResult() at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior) at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader() at Marten.NulloRetryPolicy.Execute[TResult](Func1 operation) at Marten.Services.ManagedConnection.ExecuteReader(NpgsqlCommand command) Exception data: Severity: ERRORE SqlState: 42704 MessageText: il vincolo “pk_mt_doc_transit” per la tabella “mt_doc_transit” non esiste Where: istruzione SQL “INSERT INTO parko_rts.mt_doc_transit (“data”, “mt_dotnet_type”, “id”, “mt_version”, mt_last_modified) VALUES (doc, docDotNetType, docId, docVersion, transaction_timestamp()) ON CONFLICT ON CONSTRAINT pk_mt_doc_transit DO UPDATE SET “data” = doc, “mt_dotnet_type” = docDotNetType, “mt_version” = docVersion, mt_last_modified = transaction_timestamp()” funzione PL/pgSQL parko_rts.mt_upsert_transit(jsonb,character varying,bigint,uuid) riga 5 a istruzione SQL File: d:\pginstaller_13.auto\postgres.windows-x64\src\backend\catalog\pg_constraint.c Line: 968 Routine: get_relation_constraint_attnos — End of inner exception stack trace — at Baseline.Exceptions.ExceptionTransformExtensions.TransformAndThrow(IEnumerable1 transforms, Exception ex) at Baseline.Exceptions.ExceptionTransforms.TransformAndThrow(Exception ex) at Marten.Exceptions.MartenExceptionTransformer.WrapAndThrow(NpgsqlCommand command, Exception exception) at Marten.Services.ManagedConnection.handleCommandException(NpgsqlCommand cmd, Exception e) at Marten.Services.ManagedConnection.ExecuteReader(NpgsqlCommand command) at Marten.Internal.UpdateBatch.ApplyChanges(IMartenSession session) --- End of stack trace from previous location --- at Baseline.Exceptions.ExceptionTransformExtensions.TransformAndThrow(IEnumerable1 transforms, Exception ex) at Marten.Internal.UpdateBatch.ApplyChanges(IMartenSession session) at Marten.Internal.Sessions.DocumentSessionBase.ExecuteBatch(IUpdateBatch batch) at Marten.Internal.Sessions.DocumentSessionBase.SaveChanges() at LibRtDb.Services.TransitsService.UpdateTransit(Transit NewTransit) in C:\Users\maxym.oboyshev\source\repos\ParkO_V3\ADVANCED_RTS\RT_DB\LibRtDb\Services\TransitsService.cs:line 392 Marten Command Failure:$ select parko_rts.mt_upsert_transit(:p0, :p1, :p2, :p3);$ $ 42704: il vincolo “pk_mt_doc_transit” per la tabella “mt_doc_transit” non esiste `

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 1
  • Comments: 16 (6 by maintainers)

Most upvoted comments

@oskardudycz yep, that looks great! The migrations it creates this time has a couple of new lines

alter table public.mt_doc_application drop constraint pk_mt_doc_application;
alter table public.mt_doc_application add CONSTRAINT pkey_mt_doc_application_id PRIMARY KEY (id);

which is exactly what we want, so that looks perfect. Thank you all so much for getting this fixed so quickly!

@oskardudycz Will give it a run in a couple of hours, have some meetings to get through!!

@tonykaralis @amferguson, would you be so kind as to provide:

  • document store configurations (old and new) - at least with the document type that’s failing,
  • create a statement for the failing table?

That’d help us to tackle that case. Thank you in advance!