From 3d14ef4106c06dd7758c4f9b66d8f250600e75f1 Mon Sep 17 00:00:00 2001 From: Gleb Tcivie Date: Fri, 5 Jul 2024 12:33:39 +0300 Subject: [PATCH 1/3] Fix issue with table --- docker/postgres/init.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker/postgres/init.sql b/docker/postgres/init.sql index 7d16017..3f234c7 100644 --- a/docker/postgres/init.sql +++ b/docker/postgres/init.sql @@ -49,6 +49,4 @@ CREATE TABLE IF NOT EXISTS node_neighbors UNIQUE (node_id, neighbor_id) ); -CREATE INDEX idx_node_neighbors_node_id ON node_neighbors (node_id); -CREATE INDEX idx_node_neighbors_neighbor_id ON node_neighbors (neighbor_id); CREATE UNIQUE INDEX idx_unique_node_neighbor ON node_neighbors (node_id, neighbor_id); From 945cf3bee5040ac22442d1ac7c27f40db418ead9 Mon Sep 17 00:00:00 2001 From: Gleb Tcivie Date: Fri, 5 Jul 2024 12:33:39 +0300 Subject: [PATCH 2/3] Fix issue with table --- docker/postgres/init.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker/postgres/init.sql b/docker/postgres/init.sql index 7d16017..3f234c7 100644 --- a/docker/postgres/init.sql +++ b/docker/postgres/init.sql @@ -49,6 +49,4 @@ CREATE TABLE IF NOT EXISTS node_neighbors UNIQUE (node_id, neighbor_id) ); -CREATE INDEX idx_node_neighbors_node_id ON node_neighbors (node_id); -CREATE INDEX idx_node_neighbors_neighbor_id ON node_neighbors (neighbor_id); CREATE UNIQUE INDEX idx_unique_node_neighbor ON node_neighbors (node_id, neighbor_id); From 3a8f3c4c7d586efcbab2ad447ca3ad7d6f211afa Mon Sep 17 00:00:00 2001 From: Gleb Tcivie Date: Fri, 5 Jul 2024 12:49:57 +0300 Subject: [PATCH 3/3] Fix issue with keys --- docker/postgres/init.sql | 2 +- exporter/processors.py | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/docker/postgres/init.sql b/docker/postgres/init.sql index 3f234c7..1fd0d0a 100644 --- a/docker/postgres/init.sql +++ b/docker/postgres/init.sql @@ -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) ); diff --git a/exporter/processors.py b/exporter/processors.py index 21d29d5..1eb0c60 100644 --- a/exporter/processors.py +++ b/exporter/processors.py @@ -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()