Azure / Azure/data-api-builder

[Bug]: cannot map stored procedure on Postgres

Aperta
#2,758 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub
bug known-issue pgsql triage
Lingua principale
C#
Stelle
1.5k
Fork
370
Merge medio
3g 22h
PR unite (30g)
9

Descrizione

### What happened?

I have an entity mapped with the following definition in the config file:
```json
...
"azets_insert_altinn_response": {
"source": {
"object": "azets.insert_altinn_response",
"type": "stored-procedure",
"parameters": {
"jobid": "number",
"jobtype": "string",
"response": "string"
}
},
"rest": {
"methods": [
"POST"
]
},
"permissions": [
{
"role": "authenticated",
"actions": [
"execute"
]
}
]
},
...
```

However at startup DAB gives the following error:
```
fail: Azure.DataApiBuilder.Service.Startup[0]
Unable to complete runtime initialization. Refer to exception for error details.
Azure.DataApiBuilder.Service.Exceptions.DataApiBuilderException: Cannot obtain Schema for entity azets_insert_altinn_response with underlying database object source: azets.insert_altinn_response due to: Invalid collection name. (Parameter 'collectionName')
Actual value was Procedures.
---> System.ArgumentOutOfRangeException: Invalid collection name. (Parameter 'collectionName')
Actual value was Procedures.
at Npgsql.NpgsqlSchema.GetSchema(Boolean async, NpgsqlConnection conn, String collectionName, String[] restrictions, CancellationToken cancellationToken)
at Npgsql.NpgsqlConnection.GetSchemaAsync(String collectionName, String[] restrictions, CancellationToken cancellationToken)
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.FillSchemaForStoredProcedureAsync(Entity procedureEntity, String entityName, String schemaName, String storedProcedureSourceName, StoredProcedureDefinition storedProcedureDefinition) in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 411
--- End of inner exception stack trace ---
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.HandleOrRecordException(Exception e) in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 101
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.PopulateObjectDefinitionForEntity(String entityName, Entity entity) in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 1117
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.PopulateObjectDefinitionForEntities() in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 1055
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.InitializeAsync() in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 290
at Azure.DataApiBuilder.Core.Services.MetadataProviders.MetadataProviderFactory.InitializeAsync() in /_/src/Core/Services/MetadataProviders/MetadataProviderFactory.cs:line 92
at Azure.DataApiBuilder.Service.Startup.PerformOnConfigChangeAsync(IApplicationBuilder app) in /_/src/Service/Startup.cs:line 858
fail: Azure.DataApiBuilder.Service.Startup[0]
Could not initialize the engine with the runtime config file: /opt/dab-config.json
info: Microsoft.Hosting.Lifetime[0]
Application is shutting down...
fail: Microsoft.Extensions.Hosting.Internal.Host[11]
Hosting failed to start
System.Threading.Tasks.TaskCanceledException: A task was canceled.
at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token)
at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
Unable to launch the Data API builder engine.
```

### Version

1.5.56

### What database are you using?

PostgreSQL

### What hosting model are you using?

Custom Docker host

### Which API approach are you accessing DAB through?

REST

### Relevant log output

```Text
fail: Azure.DataApiBuilder.Service.Startup[0]
Unable to complete runtime initialization. Refer to exception for error details.
Azure.DataApiBuilder.Service.Exceptions.DataApiBuilderException: Cannot obtain Schema for entity azets_insert_altinn_response with underlying database object source: azets.insert_altinn_response due to: Invalid collection name. (Parameter 'collectionName')
Actual value was Procedures.
---> System.ArgumentOutOfRangeException: Invalid collection name. (Parameter 'collectionName')
Actual value was Procedures.
at Npgsql.NpgsqlSchema.GetSchema(Boolean async, NpgsqlConnection conn, String collectionName, String[] restrictions, CancellationToken cancellationToken)
at Npgsql.NpgsqlConnection.GetSchemaAsync(String collectionName, String[] restrictions, CancellationToken cancellationToken)
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.FillSchemaForStoredProcedureAsync(Entity procedureEntity, String entityName, String schemaName, String storedProcedureSourceName, StoredProcedureDefinition storedProcedureDefinition) in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 411
--- End of inner exception stack trace ---
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.HandleOrRecordException(Exception e) in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 101
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.PopulateObjectDefinitionForEntity(String entityName, Entity entity) in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 1117
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.PopulateObjectDefinitionForEntities() in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 1055
at Azure.DataApiBuilder.Core.Services.SqlMetadataProvider`3.InitializeAsync() in /_/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs:line 290
at Azure.DataApiBuilder.Core.Services.MetadataProviders.MetadataProviderFactory.InitializeAsync() in /_/src/Core/Services/MetadataProviders/MetadataProviderFactory.cs:line 92
at Azure.DataApiBuilder.Service.Startup.PerformOnConfigChangeAsync(IApplicationBuilder app) in /_/src/Service/Startup.cs:line 858
fail: Azure.DataApiBuilder.Service.Startup[0]
Could not initialize the engine with the runtime config file: /opt/dab-config.json
info: Microsoft.Hosting.Lifetime[0]
Application is shutting down...
fail: Microsoft.Extensions.Hosting.Internal.Host[11]
Hosting failed to start
System.Threading.Tasks.TaskCanceledException: A task was canceled.
at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token)
at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
Unable to launch the Data API builder engine.
```

### Code of Conduct

- [x] I agree to follow this project's Code of Conduct

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia in src/Core/Services/MetadataProviders/SqlMetadataProvider.cs, in FillSchemaForStoredProcedureAsync, dove il provider PostgreSQL chiama NpgsqlConnection.GetSchemaAsync con Procedures. Riproduci il problema usando la configurazione della stored procedure e verifica che un’entità di stored procedure PostgreSQL possa completare l’inizializzazione a runtime senza l’errore Invalid collection name.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp, postgresql
Ambito
databases
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
42/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.