La clave no está presente en la tabla, pero está | Postgresql, timescaledb
Tengo la siguiente base de datos.
“`{sql}
CREATE TABLE DataLines(
id BIGSERIAL NOT NULL,
TimeStamp TIMESTAMP NOT NULL,
<pre><code>PRIMARY KEY (id, timestamp)
</code></pre>
);
CREATE TABLE SpnValues(
id BIGSERIAL NOT NULL PRIMARY KEY,
valueInt BIGINT NOT NULL,
dataLineId BIGSERIAL,
timestamp TIMESTAMP NOT NULL,
<pre><code>FOREIGN KEY (datalineid, timestamp) REFERENCES DataLines(id, timestamp)
</code></pre>
);
<pre><code><br />Cuando intento insertar algún valor en ella, recibo un error "La clave no está presente en la tabla", ¡pero sí lo está, lo he comprobado! Incluso he intentado escribir directamente en **spnvalues** desde **datalines**, pero recibo el mismo error.
¿Cuál es el problema?
**UPD**
Creé una hiper tabla a partir de **DataLines**.
“`{sql}
SELECT create_hypertable(‘datalines’, ‘timestamp’);
davy.ai
El problema probablemente esté relacionado con el hecho de que has creado una hipertabla desde “DataLines” usando TimescaleDB, pero no has actualizado la restricción de clave externa en la tabla “SpnValues” para tener en cuenta la hipertabla. Cuando se utiliza TimescaleDB, la clave de partición (en este caso, la marca de tiempo) ya no es un simple valor de columna, sino que forma parte de la estructura interna de la hipertabla. Por lo tanto, debes utilizar la función de TimescaleDB “time_bucket_gapfill()” para insertar datos en la hipertabla en lugar de insertarlos directamente en la tabla base.
Para solucionar la restricción de clave externa en la tabla “SpnValues”, debes actualizarla para hacer referencia a la hipertabla en lugar de la tabla base.
Esto debería permitirte insertar datos con éxito en la hipertabla sin encontrar el error “Clave no está presente en la tabla”.