Fix issue with keys

This commit is contained in:
Gleb Tcivie 2024-07-05 12:49:57 +03:00
parent 39bfe3f703
commit 3a8f3c4c7d
2 changed files with 16 additions and 6 deletions

View file

@ -45,7 +45,7 @@ CREATE TABLE IF NOT EXISTS node_neighbors
neighbor_id VARCHAR,
snr FLOAT,
FOREIGN KEY (node_id) REFERENCES client_details (node_id),
FOREIGN KEY (neighbor_id) REFERENCES node_graph (node_id),
FOREIGN KEY (neighbor_id) REFERENCES client_details (node_id),
UNIQUE (node_id, neighbor_id)
);

View file

@ -504,11 +504,21 @@ class NeighborInfoAppProcessor(Processor):
for neighbor in neighbor_info.neighbors:
cur.execute("""
INSERT INTO node_neighbors (node_id, neighbor_id, snr)
VALUES (%s, %s, %s)
ON CONFLICT (node_id, neighbor_id)
DO UPDATE SET snr = EXCLUDED.snr
""", (client_details.node_id, str(neighbor.node_id), float(neighbor.snr)))
WITH upsert AS (
INSERT INTO node_neighbors (node_id, neighbor_id, snr)
VALUES (%s, %s, %s)
ON CONFLICT (node_id, neighbor_id)
DO UPDATE SET snr = EXCLUDED.snr
RETURNING node_id, neighbor_id
)
INSERT INTO client_details (node_id)
SELECT node_id FROM upsert
WHERE NOT EXISTS (SELECT 1 FROM client_details WHERE node_id = upsert.node_id)
UNION
SELECT neighbor_id FROM upsert
WHERE NOT EXISTS (SELECT 1 FROM client_details WHERE node_id = upsert.neighbor_id)
ON CONFLICT (node_id) DO NOTHING;
""", (str(client_details.node_id), str(neighbor.node_id), float(neighbor.snr)))
conn.commit()