pgr_prepare_batchwise.sh 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/bin/bash
  2. set -e
  3. source env.sh
  4. echo "🔄 PGROUTING ettevalmistus (batch'idega) skeemis ${destination_schema}"
  5. psql ${CONNECTION_NAME} -d ${destination_dbname} <<EOF
  6. -- 🧹 1. Eemalda isoleeritud lõigud batchide kaupa
  7. DO \$\$
  8. DECLARE
  9. batch_size INTEGER := 10000;
  10. min_id INTEGER;
  11. max_id INTEGER;
  12. current_id INTEGER;
  13. BEGIN
  14. SELECT MIN(id), MAX(id) INTO min_id, max_id FROM ${destination_schema}.links;
  15. current_id := min_id;
  16. WHILE current_id <= max_id LOOP
  17. WITH vertex_usage AS (
  18. SELECT source AS id FROM ${destination_schema}.links
  19. WHERE id BETWEEN current_id AND current_id + batch_size - 1
  20. UNION ALL
  21. SELECT target FROM ${destination_schema}.links
  22. WHERE id BETWEEN current_id AND current_id + batch_size - 1
  23. ),
  24. degree AS (
  25. SELECT id, COUNT(*) AS deg FROM vertex_usage GROUP BY id
  26. ),
  27. isolated_links AS (
  28. SELECT l.id
  29. FROM ${destination_schema}.links l
  30. JOIN degree s ON l.source = s.id
  31. JOIN degree t ON l.target = t.id
  32. WHERE l.id BETWEEN current_id AND current_id + batch_size - 1
  33. AND s.deg = 1 AND t.deg = 1
  34. )
  35. DELETE FROM ${destination_schema}.links
  36. WHERE id IN (SELECT id FROM isolated_links);
  37. RAISE NOTICE '🧹 Kustutatud isoleeritud lõigud vahemikust: % – %', current_id, current_id + batch_size - 1;
  38. current_id := current_id + batch_size;
  39. END LOOP;
  40. END
  41. \$\$;
  42. -- 🧼 2. Kustuta olemasolev PGROUTING tiputabel (kui on)
  43. DROP TABLE IF EXISTS ${destination_schema}.links_vertices_pgr;
  44. -- 🔗 3. Loo uued tipud ja graafianalüüs
  45. SELECT pgr_createVerticesTable('${destination_schema}.links', 'geom', 'source', 'target');
  46. SELECT pgr_analyzeGraph('${destination_schema}.links', 0.001, the_geom := 'geom', id := 'id', source := 'source', target := 'target');
  47. EOF
  48. echo "✅ PGROUTING ettevalmistus tehtud batchide kaupa."