I have postgres timescale table that stores sensor measures. The table has composite primary key with the id int incremental column and the dateTime column(it was required to be composite in oreder to make the table a hypertable), also I have warnings table that has foreign key to the sensor measures table that is also composite but when I try to insert in the warnings table it gives me foreign key constraint error that does not exist in the sensor measures table, but I checked and that composite primary key exists.
Here is the code of the function
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Utilities;
using Services.Interfaces;
using System.Text;
using Models;
using Models.Enum;
namespace AzureFunctionApplication
{
public class TelemetryHandlingFunction
{
private readonly ILogger<TelemetryHandlingFunction> _logger;
private readonly IDeviceService _deviceService;
private readonly ISensorService _sensorService;
private readonly IMeasureService _measureService;
private readonly IWarningService _warningService;
private readonly JsonDeserializer _jsonDeserializer;
public TelemetryHandlingFunction(ILogger<TelemetryHandlingFunction> logger, IDeviceService deviceService, ISensorService sensorService, IMeasureService measureService, IWarningService warningService, JsonDeserializer jsonDeserializer)
{
_logger = logger;
_deviceService = deviceService;
_sensorService = sensorService;
_measureService = measureService;
_warningService = warningService;
_jsonDeserializer = jsonDeserializer;
}
[Function("EventHubTrigger")]
public async Task Run([EventHubTrigger("eventhub", Connection = "EventHubConnectionString")] Azure.Messaging.EventHubs.EventData[] events)
{
foreach (Azure.Messaging.EventHubs.EventData @event in events)
{
if (@event.SystemProperties.TryGetValue("iothub-connection-device-id", out var deviceId))
{
_logger.LogInformation("Device ID: {deviceId}", deviceId);
var jsonString = Encoding.UTF8.GetString(@event.Body.ToArray());
var device = _jsonDeserializer.Deserialize<Device>(jsonString);
var sensorMeasureObject = _jsonDeserializer.Deserialize<SensorMeasure>(jsonString);
await _deviceService.InsertDeviceAsync(deviceId.ToString());
if (sensorMeasureObject != null)
{
_logger.LogInformation($"Device: {deviceId.ToString()}");
var sensorId = await _sensorService.GetSensorIdByAddressAndTypeAsync(sensorMeasureObject.SensorAddress, sensorMeasureObject.Type);
if(sensorId == 0)
{
await _sensorService.InsertSensorAsync(sensorMeasureObject.Name, sensorMeasureObject.SensorAddress, sensorMeasureObject.Type, 0.0, 100.0, deviceId.ToString());
sensorId = await _sensorService.GetSensorIdByAddressAndTypeAsync(sensorMeasureObject.SensorAddress, sensorMeasureObject.Type);
}
var measureId = await _measureService.InsertDataAsync(sensorMeasureObject.Value, sensorMeasureObject.Time, sensorMeasureObject.Buffered, sensorId);
var warningType = await _warningService.WarningCheck(sensorMeasureObject.Value, sensorId);
if (warningType != WarningType.NoWarning)
{
await _warningService.InsertWarningAsync(measureId, warningType, sensorMeasureObject.Time, false);
}
}
else if (device != null)
{
{
await _deviceService.UpdateDeviceStateAsync(deviceId.ToString(), device.CurrentState);
}
}
}
else
{
_logger.LogInformation("Device ID not found in system properties.");
}
}
}
}
}