Azure / Azure/data-api-builder

[Bug]: cannot map stored procedure on Postgres

Open
#2,758 3 comments 0 reactions 0 assignees View on GitHub
bug known-issue pgsql triage
Dominant language
C#
Stars
1.5k
Forks
370
Avg merge
3d 17h
Merged PRs (30d)
8

Description

### 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

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.