Guía de migración

Varias funciones están teniendo cambios en las firmas, y/o han sido remplazadas por nuevas funciones.

Resultados pueden ser diferentes dado los cambios.

Advertencia

Todas las funciones obsoletas serán removidas en las siguiente versión mayor 4.0.0

Migración de funciones

Migración de pgr_aStar

Comenzando en v3.6.0

Firmas que serán migradas:

  • pgr_aStar (Uno a Uno)

  • pgr_aStar (Uno a Muchos)

  • pgr_aStar (Muchos a Uno)

Antes de la migración:

  • Las columnas de resultados eran (seq, path_seq, [start_vid], [end_vid], node, edge, cost, agg_cost)

    • Dependiendo de la firma utilizada, es posible que falten las columnas start_vid y end_vid:

      • pgr_aStar (Uno a Uno) no tiene start_vid ni end_vid.

      • pgr_aStar (Uno a Muchos) no tiene start_vid.

      • pgr_aStar (Muchos a Uno) no tiene end_vid.

Migración:

  • Tener en cuenta la existencia de las columnas adicionales.

  • En pgr_aStar (Uno a Uno)

    • start_vid contiene el valor del parámetro start vid.

    • end_vid contiene el valor del parámetro end vid.

SELECT * FROM pgr_aStar(
  $$SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edges$$,
  6, 10);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   2 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   3 |        3 |         6 |      10 |   11 |    9 |    1 |        2
   4 |        4 |         6 |      10 |   16 |   16 |    1 |        3
   5 |        5 |         6 |      10 |   15 |    3 |    1 |        4
   6 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(6 rows)

  • En pgr_aStar (Uno a Muchos)

    • start_vid contiene el valor del parámetro start vid.

SELECT * FROM pgr_aStar(
  $$SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edges$$,
  6, ARRAY[3, 10]);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         6 |       3 |    6 |    4 |    1 |        0
   2 |        2 |         6 |       3 |    7 |    7 |    1 |        1
   3 |        3 |         6 |       3 |    3 |   -1 |    0 |        2
   4 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   5 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   6 |        3 |         6 |      10 |   11 |    9 |    1 |        2
   7 |        4 |         6 |      10 |   16 |   16 |    1 |        3
   8 |        5 |         6 |      10 |   15 |    3 |    1 |        4
   9 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(9 rows)

  • En pgr_aStar (Muchos a Uno)

    • end_vid contiene el valor del parámetro end vid.

SELECT * FROM pgr_aStar(
  $$SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edges$$,
  ARRAY[3, 6], 10);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         3 |      10 |    3 |    7 |    1 |        0
   2 |        2 |         3 |      10 |    7 |    8 |    1 |        1
   3 |        3 |         3 |      10 |   11 |    9 |    1 |        2
   4 |        4 |         3 |      10 |   16 |   16 |    1 |        3
   5 |        5 |         3 |      10 |   15 |    3 |    1 |        4
   6 |        6 |         3 |      10 |   10 |   -1 |    0 |        5
   7 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   8 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   9 |        3 |         6 |      10 |   11 |    9 |    1 |        2
  10 |        4 |         6 |      10 |   16 |   16 |    1 |        3
  11 |        5 |         6 |      10 |   15 |    3 |    1 |        4
  12 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(12 rows)

  • Si es necesario, filtrar las columnas añadidas, por ejemplo:

SELECT seq, path_seq, node, edge, cost, agg_cost FROM pgr_aStar(
  $$SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edges$$,
  6, 10);
 seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
   1 |        1 |    6 |    4 |    1 |        0
   2 |        2 |    7 |    8 |    1 |        1
   3 |        3 |   11 |    9 |    1 |        2
   4 |        4 |   16 |   16 |    1 |        3
   5 |        5 |   15 |    3 |    1 |        4
   6 |        6 |   10 |   -1 |    0 |        5
(6 rows)

  • Si es necesario añadir las nuevas columnas, similar al siguiente ejemplo donde se utiliza pgr_dijkstra, y la función tuvo que ser modificada para poder devolver las nuevas columnas:

    • En v3.0 la función my_dijkstra utiliza pgr_dijkstra.

    • A partir de v3.5 la función my_dijkstra devuelve las nuevas columnas adicionales de pgr_dijkstra.

Migración de pgr_bdAstar

Comenzando en v3.6.0

Firmas que serán migradas:

  • pgr_bdAstar (Uno a Uno)

  • pgr_bdAstar (Uno a Muchos)

  • pgr_bdAstar (Muchos a Uno)

Antes de la migración:

  • Las columnas de resultados eran (seq, path_seq, [start_vid], [end_vid], node, edge, cost, agg_cost)

    • Dependiendo de la firma utilizada, es posible que falten las columnas start_vid y end_vid:

      • pgr_bdAstar (Uno to Uno) no tiene start_vid ni end_vid.

      • pgr_bdAstar (Uno a Muchos) no tiene start_vid.

      • pgr_bdAstar (Muchos a Uno) no tiene end_vid.

Migración:

  • Tener en cuenta la existencia de las columnas adicionales.

  • En pgr_bdAstar (Uno a Uno)

    • start_vid contiene el valor del parámetro start vid.

    • end_vid contiene el valor del parámetro end vid.

SELECT * FROM pgr_bdAstar(
  $$SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edges$$,
  6, 10);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   2 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   3 |        3 |         6 |      10 |   11 |    9 |    1 |        2
   4 |        4 |         6 |      10 |   16 |   16 |    1 |        3
   5 |        5 |         6 |      10 |   15 |    3 |    1 |        4
   6 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(6 rows)

  • En pgr_bdAstar (Uno a Muchos)

    • start_vid contiene el valor del parámetro start vid.

SELECT * FROM pgr_bdAstar(
  $$SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edges$$,
  6, ARRAY[3, 10]);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         6 |       3 |    6 |    4 |    1 |        0
   2 |        2 |         6 |       3 |    7 |    7 |    1 |        1
   3 |        3 |         6 |       3 |    3 |   -1 |    0 |        2
   4 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   5 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   6 |        3 |         6 |      10 |   11 |    9 |    1 |        2
   7 |        4 |         6 |      10 |   16 |   16 |    1 |        3
   8 |        5 |         6 |      10 |   15 |    3 |    1 |        4
   9 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(9 rows)

  • En pgr_bdAstar (Muchos a Uno)

    • end_vid contiene el valor del parámetro end vid.

SELECT * FROM pgr_bdAstar(
  $$SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edges$$,
  ARRAY[3, 6], 10);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         3 |      10 |    3 |    7 |    1 |        0
   2 |        2 |         3 |      10 |    7 |    8 |    1 |        1
   3 |        3 |         3 |      10 |   11 |    9 |    1 |        2
   4 |        4 |         3 |      10 |   16 |   16 |    1 |        3
   5 |        5 |         3 |      10 |   15 |    3 |    1 |        4
   6 |        6 |         3 |      10 |   10 |   -1 |    0 |        5
   7 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   8 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   9 |        3 |         6 |      10 |   11 |    9 |    1 |        2
  10 |        4 |         6 |      10 |   16 |   16 |    1 |        3
  11 |        5 |         6 |      10 |   15 |    3 |    1 |        4
  12 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(12 rows)

  • Si es necesario, filtrar las columnas añadidas, por ejemplo:

SELECT seq, path_seq, node, edge, cost, agg_cost FROM pgr_bdAstar(
  $$SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edges$$,
  6, 10);
 seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
   1 |        1 |    6 |    4 |    1 |        0
   2 |        2 |    7 |    8 |    1 |        1
   3 |        3 |   11 |    9 |    1 |        2
   4 |        4 |   16 |   16 |    1 |        3
   5 |        5 |   15 |    3 |    1 |        4
   6 |        6 |   10 |   -1 |    0 |        5
(6 rows)

  • Si es necesario añadir las nuevas columnas, similar al siguiente ejemplo donde se utiliza pgr_dijkstra, y la función tuvo que ser modificada para poder devolver las nuevas columnas:

    • En v3.0 la función my_dijkstra utiliza pgr_dijkstra.

    • A partir de v3.5 la función my_dijkstra devuelve las nuevas columnas adicionales de pgr_dijkstra.

Migración de pgr_dijkstra

Comenzando en v3.5.0

Firmas que serán migradas:

  • pgr_dijkstra (Uno a Uno)

  • pgr_dijkstra (Uno a Muchos)

  • pgr_dijkstra (Muchos a Uno)

Antes de la migración:

  • Las columnas de resultados eran (seq, path_seq, [start_vid], [end_vid], node, edge, cost, agg_cost)

    • Dependiendo de la firma utilizada, es posible que falten las columnas start_vid y end_vid:

      • pgr_dijkstra (Uno to Uno) no tiene start_vid ni end_vid.

      • pgr_dijkstra (Uno a Muchos) no tiene start_vid.

      • pgr_dijkstra (Muchos a Uno) no tiene end_vid.

Migración:

  • Tener en cuenta la existencia de las columnas adicionales.

  • En pgr_dijkstra (Uno a Uno)

    • start_vid contiene el valor del parámetro start vid.

    • end_vid contiene el valor del parámetro end vid.

SELECT * FROM pgr_dijkstra(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  6, 10);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   2 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   3 |        3 |         6 |      10 |   11 |    9 |    1 |        2
   4 |        4 |         6 |      10 |   16 |   16 |    1 |        3
   5 |        5 |         6 |      10 |   15 |    3 |    1 |        4
   6 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(6 rows)

  • En pgr_dijkstra (Uno a Muchos)

    • start_vid contiene el valor del parámetro start vid.

SELECT * FROM pgr_dijkstra(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  6, ARRAY[3, 10]);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         6 |       3 |    6 |    4 |    1 |        0
   2 |        2 |         6 |       3 |    7 |    7 |    1 |        1
   3 |        3 |         6 |       3 |    3 |   -1 |    0 |        2
   4 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   5 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   6 |        3 |         6 |      10 |   11 |    9 |    1 |        2
   7 |        4 |         6 |      10 |   16 |   16 |    1 |        3
   8 |        5 |         6 |      10 |   15 |    3 |    1 |        4
   9 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(9 rows)

  • En pgr_dijkstra (Muchos a Uno)

    • end_vid contiene el valor del parámetro end vid.

SELECT * FROM pgr_dijkstra(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  ARRAY[3, 6], 10);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |         3 |      10 |    3 |    7 |    1 |        0
   2 |        2 |         3 |      10 |    7 |    8 |    1 |        1
   3 |        3 |         3 |      10 |   11 |    9 |    1 |        2
   4 |        4 |         3 |      10 |   16 |   16 |    1 |        3
   5 |        5 |         3 |      10 |   15 |    3 |    1 |        4
   6 |        6 |         3 |      10 |   10 |   -1 |    0 |        5
   7 |        1 |         6 |      10 |    6 |    4 |    1 |        0
   8 |        2 |         6 |      10 |    7 |    8 |    1 |        1
   9 |        3 |         6 |      10 |   11 |    9 |    1 |        2
  10 |        4 |         6 |      10 |   16 |   16 |    1 |        3
  11 |        5 |         6 |      10 |   15 |    3 |    1 |        4
  12 |        6 |         6 |      10 |   10 |   -1 |    0 |        5
(12 rows)

  • Si es necesario, filtrar las columnas añadidas, por ejemplo:

SELECT seq, path_seq, node, edge, cost, agg_cost FROM pgr_dijkstra(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  6, 10);
 seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
   1 |        1 |    6 |    4 |    1 |        0
   2 |        2 |    7 |    8 |    1 |        1
   3 |        3 |   11 |    9 |    1 |        2
   4 |        4 |   16 |   16 |    1 |        3
   5 |        5 |   15 |    3 |    1 |        4
   6 |        6 |   10 |   -1 |    0 |        5
(6 rows)

  • Si es necesario, añadir las nuevas columnas, por ejemplo:

    • En v3.0 la función my_dijkstra utiliza pgr_dijkstra.

    • A partir de v3.5 la función my_dijkstra devuelve las nuevas columnas adicionales de pgr_dijkstra.

Migración de pgr_drivingDistance

A partir de v3.6.0, las columnas resultantes de pgr_drivingDistance son estandarizadas.

de:

(seq, [from_v,] node, edge, cost, agg_cost)

a:

(seq, depth, start_vid, pred, node, edge, cost, agg_cost)

Firmas que serán migradas:

  • pgr_drivingDistance (Vértice único)

  • pgr_drivingDistance (Múltiples vértices)

Antes de la migración:

Columnas de resultados eran (seq, path_seq, [start_vid], [end_vid], node, edge, cost, agg_cost)

  • pgr_drivingDistance (Vértice único)

    • No tiene las columnas start_vid ni depth en los resultados.

  • pgr_drivingDistance (Múltiples vértices)

    • Tiene la columa de resultados from_v en vez de start_vid.

    • no tiene la columna depth en los resultados.

Migración:

  • Tener en cuenta la existencia y el cambio de nombre de las columnas de resultados.

pgr_drivingDistance (Vértice único)

Usando éste ejemplo.

  • start_vid contiene el valor del parámetro start vid.

  • depth contiene la profundidad del node.

  • pred contiene el predecesor del nodo.

    SELECT * FROM pgr_drivingDistance(
      $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
      11, 3.0);
     seq | depth | start_vid | pred | node | edge | cost | agg_cost
    -----+-------+-----------+------+------+------+------+----------
       1 |     0 |        11 |   11 |   11 |   -1 |    0 |        0
       2 |     1 |        11 |   11 |    7 |    8 |    1 |        1
       3 |     1 |        11 |   11 |   12 |   11 |    1 |        1
       4 |     1 |        11 |   11 |   16 |    9 |    1 |        1
       5 |     2 |        11 |    7 |    3 |    7 |    1 |        2
       6 |     2 |        11 |    7 |    6 |    4 |    1 |        2
       7 |     2 |        11 |    7 |    8 |   10 |    1 |        2
       8 |     2 |        11 |   16 |   15 |   16 |    1 |        2
       9 |     2 |        11 |   16 |   17 |   15 |    1 |        2
      10 |     3 |        11 |    3 |    1 |    6 |    1 |        3
      11 |     3 |        11 |    6 |    5 |    1 |    1 |        3
      12 |     3 |        11 |    8 |    9 |   14 |    1 |        3
      13 |     3 |        11 |   15 |   10 |    3 |    1 |        3
    (13 rows)
    
    

Si es necesario, filtrar las columnas añadidas, por ejemplo, para devolver las columnas originales

SELECT seq, node, edge, cost, agg_cost
FROM pgr_drivingDistance(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  11, 3.0);
 seq | node | edge | cost | agg_cost
-----+------+------+------+----------
   1 |   11 |   -1 |    0 |        0
   2 |    7 |    8 |    1 |        1
   3 |   12 |   11 |    1 |        1
   4 |   16 |    9 |    1 |        1
   5 |    3 |    7 |    1 |        2
   6 |    6 |    4 |    1 |        2
   7 |    8 |   10 |    1 |        2
   8 |   15 |   16 |    1 |        2
   9 |   17 |   15 |    1 |        2
  10 |    1 |    6 |    1 |        3
  11 |    5 |    1 |    1 |        3
  12 |    9 |   14 |    1 |        3
  13 |   10 |    3 |    1 |        3
(13 rows)

pgr_drivingDistance (Múltiples vértices)

Usando éste ejemplo.

  • El nombre de la columna de resultados from_v cambia a start_vid.

  • depth contiene la profundidad del node.

  • pred contiene el predecesor del nodo.

    SELECT *
    FROM pgr_drivingDistance(
      $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
      ARRAY[11, 16], 3.0, equicost => true);
     seq | depth | start_vid | pred | node | edge | cost | agg_cost
    -----+-------+-----------+------+------+------+------+----------
       1 |     0 |        11 |   11 |   11 |   -1 |    0 |        0
       2 |     1 |        11 |   11 |    7 |    8 |    1 |        1
       3 |     1 |        11 |   11 |   12 |   11 |    1 |        1
       4 |     2 |        11 |    7 |    3 |    7 |    1 |        2
       5 |     2 |        11 |    7 |    6 |    4 |    1 |        2
       6 |     2 |        11 |    7 |    8 |   10 |    1 |        2
       7 |     3 |        11 |    3 |    1 |    6 |    1 |        3
       8 |     3 |        11 |    6 |    5 |    1 |    1 |        3
       9 |     3 |        11 |    8 |    9 |   14 |    1 |        3
      10 |     0 |        16 |   16 |   16 |   -1 |    0 |        0
      11 |     1 |        16 |   16 |   15 |   16 |    1 |        1
      12 |     1 |        16 |   16 |   17 |   15 |    1 |        1
      13 |     2 |        16 |   15 |   10 |    3 |    1 |        2
    (13 rows)
    
    

Si es necesario, filtrar y cambiar el nombre de las columnas, por ejemplo, para devolver las columnas originales:

SELECT seq, start_vid AS from_v, node, edge, cost, agg_cost
FROM pgr_drivingDistance(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  ARRAY[11, 16], 3.0, equicost => true);
 seq | from_v | node | edge | cost | agg_cost
-----+--------+------+------+------+----------
   1 |     11 |   11 |   -1 |    0 |        0
   2 |     11 |    7 |    8 |    1 |        1
   3 |     11 |   12 |   11 |    1 |        1
   4 |     11 |    3 |    7 |    1 |        2
   5 |     11 |    6 |    4 |    1 |        2
   6 |     11 |    8 |   10 |    1 |        2
   7 |     11 |    1 |    6 |    1 |        3
   8 |     11 |    5 |    1 |    1 |        3
   9 |     11 |    9 |   14 |    1 |        3
  10 |     16 |   16 |   -1 |    0 |        0
  11 |     16 |   15 |   16 |    1 |        1
  12 |     16 |   17 |   15 |    1 |        1
  13 |     16 |   10 |    3 |    1 |        2
(13 rows)

Migración de pgr_kruskalDD / pgr_kruskalBFS / pgr_kruskalDFS

A partir de v3.6.0, Las columnas resultantes de pgr_kruskalDD, pgr_kruskalBFS and pgr_kruskalDFS son estandarizadas.

de:

(seq, depth, start_vid, node, edge, cost, agg_cost)

a:

(seq, depth, start_vid, pred, node, edge, cost, agg_cost)

  • pgr_kruskalDD

    • Vértice único

    • Múltiples vértices

  • pgr_kruskalDFS

    • Vértice único

    • Múltiples vértices

  • pgr_kruskalBFS

    • Vértice único

    • Múltiples vértices

Antes de la migración:

Las columnas de salida fueron (seq, depth, start_vid, node, edge, cost, agg_cost)

  • Vértice único y vértices múltiples

    • No tiene columna de resultados pred.

Migración:

  • Tenga en cuenta la existencia de columnas de resultados pred.

  • Si es necesario, filtrar las columnas añadidas

Kruskal vértice único

Usar pgr_KruskalDD como ejemplo. La migración es similar a todas las funciones afectadas.

Comparación con este ejemplo.

Ahora la columna pred existe y contiene el predecesor del node.

SELECT * FROM pgr_kruskalDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  6, 3.5);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |         6 |    6 |    6 |   -1 |    0 |        0
   2 |     1 |         6 |    6 |    5 |    1 |    1 |        1
   3 |     1 |         6 |    6 |   10 |    2 |    1 |        1
   4 |     2 |         6 |   10 |   15 |    3 |    1 |        2
   5 |     3 |         6 |   15 |   16 |   16 |    1 |        3
(5 rows)

Si es necesario, filtrar las columnas añadidas, por ejemplo, para devolver las columnas originales

SELECT seq, depth, start_vid, node, edge, cost, agg_cost
FROM pgr_kruskalDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  6, 3.5);
 seq | depth | start_vid | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+----------
   1 |     0 |         6 |    6 |   -1 |    0 |        0
   2 |     1 |         6 |    5 |    1 |    1 |        1
   3 |     1 |         6 |   10 |    2 |    1 |        1
   4 |     2 |         6 |   15 |    3 |    1 |        2
   5 |     3 |         6 |   16 |   16 |    1 |        3
(5 rows)

Kruskal vértices múltiples

Usar pgr_KruskalDD como ejemplo. La migración es similar a todas las funciones afectadas.

Comparación con este ejemplo.

Ahora la columna pred existe y contiene el predecesor del node.

SELECT * FROM pgr_kruskalDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  ARRAY[9, 6], 3.5);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |         6 |    6 |    6 |   -1 |    0 |        0
   2 |     1 |         6 |    6 |    5 |    1 |    1 |        1
   3 |     1 |         6 |    6 |   10 |    2 |    1 |        1
   4 |     2 |         6 |   10 |   15 |    3 |    1 |        2
   5 |     3 |         6 |   15 |   16 |   16 |    1 |        3
   6 |     0 |         9 |    9 |    9 |   -1 |    0 |        0
   7 |     1 |         9 |    9 |    8 |   14 |    1 |        1
   8 |     2 |         9 |    8 |    7 |   10 |    1 |        2
   9 |     3 |         9 |    7 |    3 |    7 |    1 |        3
  10 |     2 |         9 |    8 |   12 |   12 |    1 |        2
  11 |     3 |         9 |   12 |   11 |   11 |    1 |        3
  12 |     3 |         9 |   12 |   17 |   13 |    1 |        3
(12 rows)

Si es necesario, filtrar las columnas añadidas, por ejemplo, para devolver las columnas originales

SELECT seq, depth, start_vid, node, edge, cost, agg_cost
FROM pgr_kruskalDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  ARRAY[9, 6], 3.5);
 seq | depth | start_vid | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+----------
   1 |     0 |         6 |    6 |   -1 |    0 |        0
   2 |     1 |         6 |    5 |    1 |    1 |        1
   3 |     1 |         6 |   10 |    2 |    1 |        1
   4 |     2 |         6 |   15 |    3 |    1 |        2
   5 |     3 |         6 |   16 |   16 |    1 |        3
   6 |     0 |         9 |    9 |   -1 |    0 |        0
   7 |     1 |         9 |    8 |   14 |    1 |        1
   8 |     2 |         9 |    7 |   10 |    1 |        2
   9 |     3 |         9 |    3 |    7 |    1 |        3
  10 |     2 |         9 |   12 |   12 |    1 |        2
  11 |     3 |         9 |   11 |   11 |    1 |        3
  12 |     3 |         9 |   17 |   13 |    1 |        3
(12 rows)

Migración de pgr_KSP

A partir de v3.6.0 En pgr_KSP las columnas de resultados están siendo estandarizadas.

de:

(seq, path_id, path_seq, node, edge, cost, agg_cost)

de:

(seq, path_id, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)

Firmas que serán migradas:

  • pgr_KSP (Uno a Uno)

Antes de la migración:

  • Columnas de resultados eran (seq, path_id, path_seq, node, edge, cost, agg_cost)

    • las columnas start_vid y end_vid no existen.

      • pgr_KSP (Uno a Uno) no tiene start_vid ni end_vid.

Migración:

  • Tener en cuenta la existencia de las columnas adicionales.

pgr_KSP (Uno a Uno)

Usando éste ejemplo.

  • start_vid contiene el valor del parámetro start vid.

  • end_vid contiene el valor del parámetro end vid.

SELECT * FROM pgr_KSP(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  6, 17, 2);
 seq | path_id | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+---------+----------+-----------+---------+------+------+------+----------
   1 |       1 |        1 |         6 |      17 |    6 |    4 |    1 |        0
   2 |       1 |        2 |         6 |      17 |    7 |   10 |    1 |        1
   3 |       1 |        3 |         6 |      17 |    8 |   12 |    1 |        2
   4 |       1 |        4 |         6 |      17 |   12 |   13 |    1 |        3
   5 |       1 |        5 |         6 |      17 |   17 |   -1 |    0 |        4
   6 |       2 |        1 |         6 |      17 |    6 |    4 |    1 |        0
   7 |       2 |        2 |         6 |      17 |    7 |    8 |    1 |        1
   8 |       2 |        3 |         6 |      17 |   11 |    9 |    1 |        2
   9 |       2 |        4 |         6 |      17 |   16 |   15 |    1 |        3
  10 |       2 |        5 |         6 |      17 |   17 |   -1 |    0 |        4
(10 rows)

Si es necesario, filtrar las columnas añadidas, por ejemplo, para devolver las columnas originales:

SELECT seq, path_id, path_seq, node, edge, cost, agg_cost FROM pgr_KSP(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  6, 17, 2);
 seq | path_id | path_seq | node | edge | cost | agg_cost
-----+---------+----------+------+------+------+----------
   1 |       1 |        1 |    6 |    4 |    1 |        0
   2 |       1 |        2 |    7 |   10 |    1 |        1
   3 |       1 |        3 |    8 |   12 |    1 |        2
   4 |       1 |        4 |   12 |   13 |    1 |        3
   5 |       1 |        5 |   17 |   -1 |    0 |        4
   6 |       2 |        1 |    6 |    4 |    1 |        0
   7 |       2 |        2 |    7 |    8 |    1 |        1
   8 |       2 |        3 |   11 |    9 |    1 |        2
   9 |       2 |        4 |   16 |   15 |    1 |        3
  10 |       2 |        5 |   17 |   -1 |    0 |        4
(10 rows)

Migración de pgr_maxCardinalityMatch

pgr_maxCardinalityMatch funciona solamente para grafos no dirigidos, entonces la bandera directed ha sido removida.

A partir de v3.4.0 <https://docs.pgrouting.org/3.4/es/migration.html>`__

Firma que serán migrada:

pgr_maxCardinalityMatch(Edges SQL, [directed])
 RETURNS SETOF (seq, edge, source, target)

Migración es necesaria, porque:

  • Usa cost y reverse_cost en la consulta interna

  • Los resultados son ordenados

  • Funciona para grafos no dirigidos.

  • Nueva firma

    • pgr_maxCardinalityMatch(text) regresa solamente la columna edge.

    • La bandera opcional directed es removida.

Antes de migración:

SELECT * FROM pgr_maxCardinalityMatch(
  $$SELECT id, source, target, cost AS going, reverse_cost AS coming FROM edges$$,
  directed => true
);
WARNING:  pgr_maxCardinalityMatch(text,boolean) deprecated signature on v3.4.0
 seq | edge | source | target
-----+------+--------+--------
   1 |    1 |      5 |      6
   2 |    5 |     10 |     11
   3 |    6 |      1 |      3
   4 |   13 |     12 |     17
   5 |   14 |      8 |      9
   6 |   16 |     15 |     16
   7 |   17 |      2 |      4
   8 |   18 |     13 |     14
(8 rows)

  • Las columnas usadas son going y coming para representar la existencia de la arista.

  • La flag directed es usada para indicar si fue para un grafo dirigido or no dirigido.

    • La bandera directed es ignorada.

      • Independiente de su valor, da el resultado considerando el grafo como no dirigido.

Migración:

  • Usa las columnas cost y reverse_cost para representar la existenica de una arista.

  • No use la bandera directed.

  • En la consulta solo devuelve la columna edge.

SELECT * FROM pgr_maxCardinalityMatch(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$
);
 edge
------
    1
    5
    6
   13
   14
   16
   17
   18
(8 rows)

Migración de pgr_primDD / pgr_primBFS / pgr_primDFS

A partir de v3.7.0 se estandarizan las columnas de resultados pgr_primDD, pgr_primBFS y pgr_primDFS.

de:

(seq, depth, start_vid, node, edge, cost, agg_cost)

a:

(seq, depth, start_vid, pred, node, edge, cost, agg_cost)

  • pgr_primDD

    • Vértice único

    • Múltiples vértices

  • pgr_primDFS

    • Vértice único

    • Múltiples vértices

  • pgr_primBFS

    • Vértice único

    • Múltiples vértices

Antes de la migración:

Las columnas de salida fueron (seq, depth, start_vid, node, edge, cost, agg_cost)

  • Vértice único y vértices múltiples

    • No tiene columna de resultados pred.

Migración:

  • Tenga en cuenta la existencia de columnas de resultados pred.

  • Si es necesario, filtrar las columnas añadidas

Prim vértice único

Usando pgr_primDD como ejemplo. La migración es similar para todas las funciones afectadas.

Comparación con este ejemplo.

Ahora la columna pred existe y contiene el predecesor del node.

SELECT * FROM pgr_primDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  6, 3.5);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |         6 |    6 |    6 |   -1 |    0 |        0
   2 |     1 |         6 |    6 |    5 |    1 |    1 |        1
   3 |     1 |         6 |    6 |   10 |    2 |    1 |        1
   4 |     2 |         6 |   10 |   15 |    3 |    1 |        2
   5 |     2 |         6 |   10 |   11 |    5 |    1 |        2
   6 |     3 |         6 |   11 |   16 |    9 |    1 |        3
   7 |     3 |         6 |   11 |   12 |   11 |    1 |        3
   8 |     1 |         6 |    6 |    7 |    4 |    1 |        1
   9 |     2 |         6 |    7 |    3 |    7 |    1 |        2
  10 |     3 |         6 |    3 |    1 |    6 |    1 |        3
  11 |     2 |         6 |    7 |    8 |   10 |    1 |        2
  12 |     3 |         6 |    8 |    9 |   14 |    1 |        3
(12 rows)

Si es necesario, filtrar las columnas añadidas, por ejemplo, para devolver las columnas originales

SELECT seq, depth, start_vid, node, edge, cost, agg_cost
FROM pgr_primDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  6, 3.5);
 seq | depth | start_vid | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+----------
   1 |     0 |         6 |    6 |   -1 |    0 |        0
   2 |     1 |         6 |    5 |    1 |    1 |        1
   3 |     1 |         6 |   10 |    2 |    1 |        1
   4 |     2 |         6 |   15 |    3 |    1 |        2
   5 |     2 |         6 |   11 |    5 |    1 |        2
   6 |     3 |         6 |   16 |    9 |    1 |        3
   7 |     3 |         6 |   12 |   11 |    1 |        3
   8 |     1 |         6 |    7 |    4 |    1 |        1
   9 |     2 |         6 |    3 |    7 |    1 |        2
  10 |     3 |         6 |    1 |    6 |    1 |        3
  11 |     2 |         6 |    8 |   10 |    1 |        2
  12 |     3 |         6 |    9 |   14 |    1 |        3
(12 rows)

Prim vértices múltiples

Usando pgr_primDD como ejemplo. La migración es similar para todas las funciones afectadas.

Comparación con este ejemplo.

Ahora la columna pred existe y contiene el predecesor del node.

SELECT * FROM pgr_primDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  ARRAY[9, 6], 3.5);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |         6 |    6 |    6 |   -1 |    0 |        0
   2 |     1 |         6 |    6 |    5 |    1 |    1 |        1
   3 |     1 |         6 |    6 |   10 |    2 |    1 |        1
   4 |     2 |         6 |   10 |   15 |    3 |    1 |        2
   5 |     2 |         6 |   10 |   11 |    5 |    1 |        2
   6 |     3 |         6 |   11 |   16 |    9 |    1 |        3
   7 |     3 |         6 |   11 |   12 |   11 |    1 |        3
   8 |     1 |         6 |    6 |    7 |    4 |    1 |        1
   9 |     2 |         6 |    7 |    3 |    7 |    1 |        2
  10 |     3 |         6 |    3 |    1 |    6 |    1 |        3
  11 |     2 |         6 |    7 |    8 |   10 |    1 |        2
  12 |     3 |         6 |    8 |    9 |   14 |    1 |        3
  13 |     0 |         9 |    9 |    9 |   -1 |    0 |        0
  14 |     1 |         9 |    9 |    8 |   14 |    1 |        1
  15 |     2 |         9 |    8 |    7 |   10 |    1 |        2
  16 |     3 |         9 |    7 |    6 |    4 |    1 |        3
  17 |     3 |         9 |    7 |    3 |    7 |    1 |        3
(17 rows)

Si es necesario, filtrar las columnas añadidas, por ejemplo, para devolver las columnas originales

SELECT seq, depth, start_vid, node, edge, cost, agg_cost
FROM pgr_primDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  ARRAY[9, 6], 3.5);
 seq | depth | start_vid | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+----------
   1 |     0 |         6 |    6 |   -1 |    0 |        0
   2 |     1 |         6 |    5 |    1 |    1 |        1
   3 |     1 |         6 |   10 |    2 |    1 |        1
   4 |     2 |         6 |   15 |    3 |    1 |        2
   5 |     2 |         6 |   11 |    5 |    1 |        2
   6 |     3 |         6 |   16 |    9 |    1 |        3
   7 |     3 |         6 |   12 |   11 |    1 |        3
   8 |     1 |         6 |    7 |    4 |    1 |        1
   9 |     2 |         6 |    3 |    7 |    1 |        2
  10 |     3 |         6 |    1 |    6 |    1 |        3
  11 |     2 |         6 |    8 |   10 |    1 |        2
  12 |     3 |         6 |    9 |   14 |    1 |        3
  13 |     0 |         9 |    9 |   -1 |    0 |        0
  14 |     1 |         9 |    8 |   14 |    1 |        1
  15 |     2 |         9 |    7 |   10 |    1 |        2
  16 |     3 |         9 |    6 |    4 |    1 |        3
  17 |     3 |         9 |    3 |    7 |    1 |        3
(17 rows)

Migración de pgr_withPointsDD

A partir de v3.6.0 En pgr_withPointsDD - Propuesto las columnas de resultados están siendo estandarizadas.

de:

(seq, [start_vid], node, edge, cost, agg_cost)

a:

(seq, depth, start_vid, pred, node, edge, cost, agg_cost)

Y el parámetro driving_side cambió de opcional con nombre a obligatorio sin nombre driving side y su validez difiere para grafos dirigidos y no dirigidos.

Firmas que serán migradas:

  • pgr_withPointsDD (vértice único)

  • pgr_withPointsDD (Múltiples vértices)

Antes de la migración:

  • pgr_withPointsDD (vértice único)

    • Las columnas de resultados eran (seq, node, edge, cost, agg_cost)

    • No tiene columnas de resultados start_vid, pred y depth.

    • El parámetro driving_side era opcional ahora es obligatorio sin nombre.

  • pgr_withPointsDD (Vértices múltiples)

    • Las columnas de salida eran (seq, start_vid, node, edge, cost, agg_cost)

    • No tiene columnas de resultados depth y pred.

    • El parámetro driving_side era opcional ahora es obligatorio sin nombre.

El lado de manejo era opcional

Los valores predeterminados en esta consulta son:

dirigido:

verdadero

driving_side:

“b”

detalles:

false

SELECT * FROM pgr_withPointsDD(
  $$SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  -1, 3.3);
WARNING:  pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean) deprecated signature on 3.6.0
 seq | node | edge | cost | agg_cost
-----+------+------+------+----------
   1 |   -1 |   -1 |    0 |        0
   2 |    5 |    1 |  0.4 |      0.4
   3 |    6 |    1 |  0.6 |      0.6
   4 |    7 |    4 |    1 |      1.6
   5 |    3 |    7 |    1 |      2.6
   6 |    8 |   10 |    1 |      2.6
   7 |   11 |    8 |    1 |      2.6
   8 |   -3 |   12 |  0.6 |      3.2
   9 |   -4 |    6 |  0.7 |      3.3
(9 rows)

El lado de manejo era opcional con nombre

Los valores predeterminados en esta consulta son:

dirigido:

verdadero

detalles:

false

SELECT * FROM pgr_withPointsDD(
  $$SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  -1, 3.3, driving_side => 'r');
WARNING:  pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean) deprecated signature on 3.6.0
 seq | node | edge | cost | agg_cost
-----+------+------+------+----------
   1 |   -1 |   -1 |    0 |        0
   2 |    5 |    1 |  0.4 |      0.4
   3 |    6 |    1 |    1 |      1.4
   4 |    7 |    4 |    1 |      2.4
(4 rows)

En un grafo dirigido b podía usarse como lado de manejo

Los valores predeterminados en esta consulta son:

detalles:

false

SELECT * FROM pgr_withPointsDD(
  $$SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  -1, 3.3, directed => true, driving_side => 'b');
WARNING:  pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean) deprecated signature on 3.6.0
 seq | node | edge | cost | agg_cost
-----+------+------+------+----------
   1 |   -1 |   -1 |    0 |        0
   2 |    5 |    1 |  0.4 |      0.4
   3 |    6 |    1 |  0.6 |      0.6
   4 |    7 |    4 |    1 |      1.6
   5 |    3 |    7 |    1 |      2.6
   6 |    8 |   10 |    1 |      2.6
   7 |   11 |    8 |    1 |      2.6
   8 |   -3 |   12 |  0.6 |      3.2
   9 |   -4 |    6 |  0.7 |      3.3
(9 rows)

En un grafo no dirigido r podía usarse como lado de manejo

También `` l`` podía usarse como «lado de manejo»

SELECT * FROM pgr_withPointsDD(
  $$SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  -1, 3.3, 'r', directed => true);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |        -1 |   -1 |   -1 |   -1 |    0 |        0
   2 |     1 |        -1 |   -1 |    5 |    1 |  0.4 |      0.4
   3 |     2 |        -1 |    5 |    6 |    1 |    1 |      1.4
   4 |     3 |        -1 |   -6 |    7 |    4 |    1 |      2.4
(4 rows)

Después de la migración:

  • Tener en cuenta la existencia de las columnas adicionales de resultados.

  • Las nuevas columnas de salida son (seq, depth, start_vid, pred, node, edge, cost, agg_cost)

  • El parámetro lado de manjeo es obligatorio sin nombre, y los valores válidos difieren para grafos dirigidos y no dirigidos.

    • No tiene un valor de facto.

    • En grafos dirigidos: Los valores válidos son [r, R, l, L]

    • En grafos no dirigidos: Los valores válidos son [b, B]

    • El uso de un valor inválido lanza un ERROR.

pgr_withPointsDD (vértice único)

Usando éste ejemplo.

  • (seq, depth, start_vid, pred, node, edge, cost, agg_cost)

  • start_vid contiene el valor del parámetro start vid.

  • depth contiene la profundidad desde el vértice start_vid hasta el node.

  • pred contiene el predecesor del nodo.

Para migrar, utilizar un valor válido sin nombre para lado de manejo después del parámetro distancia:

SELECT * FROM pgr_withPointsDD(
  $$SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  -1, 3.3, 'r', directed => true);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |        -1 |   -1 |   -1 |   -1 |    0 |        0
   2 |     1 |        -1 |   -1 |    5 |    1 |  0.4 |      0.4
   3 |     2 |        -1 |    5 |    6 |    1 |    1 |      1.4
   4 |     3 |        -1 |   -6 |    7 |    4 |    1 |      2.4
(4 rows)

Para obtener resultados de versiones anteriores:

  • filtrar las columnas adicionales, por ejemplo;

  • Cuando details => false para eliminar los puntos usar WHERE node >= 0 OR cost = 0

SELECT seq, node, edge, cost, agg_cost FROM pgr_withPointsDD(
  $$SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  -1, 3.3, 'r', details => true);
 seq | node | edge | cost | agg_cost
-----+------+------+------+----------
   1 |   -1 |   -1 |    0 |        0
   2 |    5 |    1 |  0.4 |      0.4
   3 |    6 |    1 |    1 |      1.4
   4 |   -6 |    4 |  0.7 |      2.1
   5 |    7 |    4 |  0.3 |      2.4
(5 rows)

pgr_withPointsDD (Múltiples vértices)

Usando éste ejemplo.

  • (seq, depth, start_vid, pred, node, edge, cost, agg_cost)

  • depth contiene la profundidad desde el vértice start_vid hasta el node.

  • pred contiene el predecesor del nodo.

SELECT * FROM pgr_withPointsDD(
  $$SELECT * FROM edges ORDER BY id$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  ARRAY[-1, 16], 3.3, 'l', equicost => true);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |        -1 |   -1 |   -1 |   -1 |    0 |        0
   2 |     1 |        -1 |   -1 |    6 |    1 |  0.6 |      0.6
   3 |     2 |        -1 |    6 |    7 |    4 |    1 |      1.6
   4 |     2 |        -1 |    6 |    5 |    1 |    1 |      1.6
   5 |     3 |        -1 |    7 |    3 |    7 |    1 |      2.6
   6 |     3 |        -1 |    7 |    8 |   10 |    1 |      2.6
   7 |     4 |        -1 |    8 |   -3 |   12 |  0.6 |      3.2
   8 |     4 |        -1 |    3 |   -4 |    6 |  0.7 |      3.3
   9 |     0 |        16 |   16 |   16 |   -1 |    0 |        0
  10 |     1 |        16 |   16 |   11 |    9 |    1 |        1
  11 |     1 |        16 |   16 |   15 |   16 |    1 |        1
  12 |     1 |        16 |   16 |   17 |   15 |    1 |        1
  13 |     2 |        16 |   15 |   10 |    3 |    1 |        2
  14 |     2 |        16 |   11 |   12 |   11 |    1 |        2
(14 rows)

Para obtener resultados de versiones anteriores:

  • Filtrar las columnas adicionales

  • Cuando details => false para eliminar los puntos usar WHERE node >= 0 OR cost = 0

SELECT seq, start_vid, node, edge, cost, agg_cost FROM pgr_withPointsDD(
  $$SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  ARRAY[-1, 16], 3.3, 'l', equicost => true) WHERE node >= 0 OR cost = 0;
 seq | start_vid | node | edge | cost | agg_cost
-----+-----------+------+------+------+----------
   1 |        -1 |   -1 |   -1 |    0 |        0
   2 |        -1 |    6 |    1 |  0.6 |      0.6
   3 |        -1 |    7 |    4 |    1 |      1.6
   4 |        -1 |    5 |    1 |    1 |      1.6
   5 |        -1 |    3 |    7 |    1 |      2.6
   6 |        -1 |    8 |   10 |    1 |      2.6
   9 |        16 |   16 |   -1 |    0 |        0
  10 |        16 |   11 |    9 |    1 |        1
  11 |        16 |   15 |   16 |    1 |        1
  12 |        16 |   17 |   15 |    1 |        1
  13 |        16 |   10 |    3 |    1 |        2
  14 |        16 |   12 |   11 |    1 |        2
(12 rows)

Migración de pgr_withPointsKSP

A partir de v3.6.0 en pgr_withPointsKSP - Propuesto las columnas de resultados están siendo estandarizadas.

de:

(seq, path_id, path_seq, node, edge, cost, agg_cost)

de:

(seq, path_id, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)

Y el parámetro «driving side» ha cambiado de opcional con nombre a obligatorio sin nombre driving side y su validez difiere para grafos dirigidos y no dirigidos.

Firmas que serán migradas:

  • pgr_withPointsKSP (Uno a Uno)

Antes de la migración:

  • Regresa conjunto de (seq, path_seq, [start_vid], [end_vid], node, edge, cost, agg_cost)

    • las columnas start_vid y end_vid no existen.

Migración:

  • Tener en cuenta la existencia de las columnas adicionales de resultados.

  • Las nuevas columnas de salida son (seq, path_id, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)

  • El parámetro lado de manjeo es obligatorio sin nombre, y los valores válidos difieren para grafos dirigidos y no dirigidos.

    • No tiene un valor de facto.

    • En grafos dirigidos: Los valores válidos son [r, R, l, L]

    • En grafos no dirigidos: Los valores válidos son [b, B]

    • El uso de un valor inválido lanza un ERROR.

pgr_withPointsKSP (Uno a Uno)

Usando este ejemplo.

  • start_vid contiene el valor del parámetro start vid.

  • end_vid contiene el valor del parámetro end vid.

SELECT * FROM pgr_withPointsKSP(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  -1, -2, 2, 'l');
 seq | path_id | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+---------+----------+-----------+---------+------+------+------+----------
   1 |       1 |        1 |        -1 |      -2 |   -1 |    1 |  0.6 |        0
   2 |       1 |        2 |        -1 |      -2 |    6 |    4 |    1 |      0.6
   3 |       1 |        3 |        -1 |      -2 |    7 |    8 |    1 |      1.6
   4 |       1 |        4 |        -1 |      -2 |   11 |   11 |    1 |      2.6
   5 |       1 |        5 |        -1 |      -2 |   12 |   13 |    1 |      3.6
   6 |       1 |        6 |        -1 |      -2 |   17 |   15 |  0.6 |      4.6
   7 |       1 |        7 |        -1 |      -2 |   -2 |   -1 |    0 |      5.2
   8 |       2 |        1 |        -1 |      -2 |   -1 |    1 |  0.6 |        0
   9 |       2 |        2 |        -1 |      -2 |    6 |    4 |    1 |      0.6
  10 |       2 |        3 |        -1 |      -2 |    7 |    8 |    1 |      1.6
  11 |       2 |        4 |        -1 |      -2 |   11 |    9 |    1 |      2.6
  12 |       2 |        5 |        -1 |      -2 |   16 |   15 |  1.6 |      3.6
  13 |       2 |        6 |        -1 |      -2 |   -2 |   -1 |    0 |      5.2
(13 rows)

Si es necesario, filtrar las columnas adicionales, por ejemplo, para devolver las columnas originales:

SELECT seq, path_id, path_seq, node, edge, cost, agg_cost FROM pgr_withPointsKSP(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT pid, edge_id, fraction, side from pointsOfInterest$$,
  -1, -2, 2, 'l');
 seq | path_id | path_seq | node | edge | cost | agg_cost
-----+---------+----------+------+------+------+----------
   1 |       1 |        1 |   -1 |    1 |  0.6 |        0
   2 |       1 |        2 |    6 |    4 |    1 |      0.6
   3 |       1 |        3 |    7 |    8 |    1 |      1.6
   4 |       1 |        4 |   11 |   11 |    1 |      2.6
   5 |       1 |        5 |   12 |   13 |    1 |      3.6
   6 |       1 |        6 |   17 |   15 |  0.6 |      4.6
   7 |       1 |        7 |   -2 |   -1 |    0 |      5.2
   8 |       2 |        1 |   -1 |    1 |  0.6 |        0
   9 |       2 |        2 |    6 |    4 |    1 |      0.6
  10 |       2 |        3 |    7 |    8 |    1 |      1.6
  11 |       2 |        4 |   11 |    9 |    1 |      2.6
  12 |       2 |        5 |   16 |   15 |  1.6 |      3.6
  13 |       2 |        6 |   -2 |   -1 |    0 |      5.2
(13 rows)

Migración de las restricciones de giro

Migración de restricciones

A partir de v3.4.0 <https://docs.pgrouting.org/3.4/es/migration.html>`__

La estructura de las restricciones ha cambiado:

Estructura de restricciones vieja

Sobre las firmas obsoletas:

  • La columna rid es ignorada

  • via_path

    • Debe de estar en orden reverso.

    • Es de tipo TEXT.

    • Cuando hay más de una arista debe de ser separada con ,.

  • target_id

    • Es la última arista del camino prohibido.

    • Es de tipo de INTEGER.

  • to_cost

    • Es de tipo FLOAT.

Creación de la vieja table de restricciones

CREATE TABLE old_restrictions (
    rid BIGINT NOT NULL,
    to_cost FLOAT,
    target_id BIGINT,
    via_path TEXT
);
CREATE TABLE

Las viejas restricciones se llenan

INSERT INTO old_restrictions (rid, to_cost, target_id, via_path) VALUES
(1, 100,  7,  '4'),
(1, 100, 11,  '8'),
(1, 100, 10,  '7'),
(2,   4,  9,  '5, 3'),
(3, 100,  9, '16');
INSERT 0 5
Contenido de viejas restricciones
SELECT * FROM old_restrictions;
 rid | to_cost | target_id | via_path
-----+---------+-----------+----------
   1 |     100 |         7 | 4
   1 |     100 |        11 | 8
   1 |     100 |        10 | 7
   2 |       4 |         9 | 5, 3
   3 |     100 |         9 | 16
(5 rows)

La restricción con rid = 2 representa \(3 \rightarrow 5 \rightarrow9\)

  • \(3\rightarrow5\)

    • esta en la columna via_path en orden reverso

    • es de tipo TEXT

  • \(9\)

    • está en la columna target_id

    • es de tipo INTEGER

Estructura de nuevas restricciones

  • La columna id es ignorada

  • Columna path

    • Es de tipo ARRAY[ANY-INTEGER].

    • Contiene todas las aristas involucradas con la restricción

    • El conjunto tiene las aristas ordenadas de la restricción.

  • Columna cost

    • Es de tipo``ANY-NUMERICAL``

La creación de la tabla de restricciones

CREATE TABLE restrictions (
    id SERIAL PRIMARY KEY,
    path BIGINT[],
    cost FLOAT
);
CREATE TABLE

Agregando las restricciones

INSERT INTO restrictions (path, cost) VALUES
(ARRAY[4, 7], 100),
(ARRAY[8, 11], 100),
(ARRAY[7, 10], 100),
(ARRAY[3, 5, 9], 4),
(ARRAY[9, 16], 100);
INSERT 0 5
Datos de restricciones
SELECT * FROM restrictions;
 id |  path   | cost
----+---------+------
  1 | {4,7}   |  100
  2 | {8,11}  |  100
  3 | {7,10}  |  100
  4 | {3,5,9} |    4
  5 | {9,16}  |  100
(5 rows)

La restricción con``rid = 2`` representa el camino \(3 \rightarrow5 \rightarrow9\).

  • El camino es claro por inspección.

Migración

Para transformar la antigua tabla de restricciones a la nueva estructura de restricciones,

  • Crea una nueva tabla con la nueva estructura de restricciones.

    • En esta guía de migración new_restrictions está siendo usada.

  • Para esta migración pgRouting proporciona una función auxiliar para la inversión de un conjunto _pgr_array_reverse necesaria para la migración.

    • _pgr_array_reverse:

      • Se creo temporalmente para esta migración

      • No está documentado.

      • Se eliminara en la próxima versión mayor 4.0.0

SELECT rid AS id,
  _pgr_array_reverse(
    array_prepend(target_id, string_to_array(via_path::text, ',')::BIGINT[])) AS path,
  to_cost AS cost
  INTO new_restrictions
FROM old_restrictions;
SELECT 5

El contenido de la tabla de migración:

SELECT * FROM new_restrictions;
 id |  path   | cost
----+---------+------
  1 | {4,7}   |  100
  1 | {8,11}  |  100
  1 | {7,10}  |  100
  2 | {3,5,9} |    4
  3 | {16,9}  |  100
(5 rows)

Migración de pgr_trsp` (Vértices)

pgr_trsp - Proposed firmas han cambiando y varios problemas han sido arreglados en las nuevas firmas. Esta sección enseñara como migrar las viejas firmas a la nueva función de reemplazo. Esto también afecta las restricciones .

A partir de v3.4.0 <https://docs.pgrouting.org/3.4/es/migration.html>`__

Firma que serán migrada:

pgr_trsp(Edges SQL, source, target,
         directed boolean, has_rcost boolean
         [,restrict_sql text]);
 RETURNS SETOF (seq, id1, id2, cost)
  • El tipo integral de Edges SQL sólo puede ser INTEGER.

  • El tipo de punto flotante del Edges SQL solo puede ser FLOAT.

  • La bandera directed es obligatoria.

    • No tiene un valor de facto.

  • No auto-detecta si la columna``reverse_cost`` existe.

    • El usuario debe de tener cuidado al coincidir la existencia de la columna con el valor del parámetro has_rcost.

  • Las restricciones de consulta interna son opcionales.

  • Los nombres de la columna de salida no tienen importancia

Migra al user:

Migrar pgr_trsp (Vértices) usando pgr_dijkstra

La siguiente consulta no tiene restricciones.

SELECT * FROM pgr_trsp(
  $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost
    FROM edges WHERE id != 16$$,
  15, 16,
  true, true);
WARNING:  pgr_trsp(text,integer,integer,boolean,boolean) deprecated signature on v3.4.0
 seq | id1 | id2 | cost
-----+-----+-----+------
   0 |  15 |   3 |    1
   1 |  10 |   5 |    1
   2 |  11 |   9 |    1
   3 |  16 |  -1 |    0
(4 rows)

  • Un mensaje sobre lo obsoleto se enseña

    • Funciones obsoletas se eliminaran en la siguiente versión mayor 4.0.0

Usa en vez pgr_dijkstra.

SELECT * FROM pgr_dijkstra(
  $$SELECT id, source, target, cost, reverse_cost
    FROM edges WHERE id != 16$$,
  15, 16);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |        15 |      16 |   15 |    3 |    1 |        0
   2 |        2 |        15 |      16 |   10 |    5 |    1 |        1
   3 |        3 |        15 |      16 |   11 |    9 |    1 |        2
   4 |        4 |        15 |      16 |   16 |   -1 |    0 |        3
(4 rows)

  • Se han eliminado la fundición de tipos.

  • pgr_dijkstra:

    • Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.

    • Acepta ANY-INTEGER sobre tipos integrales

    • Acepta ANY-NUMERICAL sobre tipos de puntos flotantes

    • La bandera directed tiene valor de facto de true.

      • Usa el mismo valor de la consulta original.

      • En este ejemplo true que es el valor de facto.

        • Se ha omitido la bandera y se ha utilizado el valor por defecto.

Cuando la necesidad de utilizar estrictamente los mismos nombres (sin importancia) y los tipos de la función han sido migradas entonces:

SELECT seq, node::INTEGER AS id1, edge::INTEGER AS id2, cost
FROM pgr_dijkstra(
  $$SELECT id, source, target, cost, reverse_cost
    FROM edges WHERE id != 16$$,
  15, 16);
 seq | id1 | id2 | cost
-----+-----+-----+------
   1 |  15 |   3 |    1
   2 |  10 |   5 |    1
   3 |  11 |   9 |    1
   4 |  16 |  -1 |    0
(4 rows)

  • id1 es el nodo

  • id2 es la arista

Migrando pgr_trsp (Vértices) usando pgr_trsp

La siguiente consulta tiene restricciones.

SELECT * FROM pgr_trsp(
  $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost
    FROM edges WHERE id != 16$$,
  15, 16,
  true, true,
  $$SELECT to_cost, target_id::INTEGER, via_path
    FROM old_restrictions$$);
WARNING:  pgr_trsp(text,integer,integer,boolean,boolean) deprecated signature on v3.4.0
 seq | id1 | id2 | cost
-----+-----+-----+------
   0 |  15 |   3 |    1
   1 |  10 |   5 |    1
   2 |  11 |  11 |    1
   3 |  12 |  13 |    1
   4 |  17 |  15 |    1
   5 |  16 |  -1 |    0
(6 rows)

  • Un mensaje sobre lo obsoleto se enseña

    • Funciones obsoletas se eliminaran en la siguiente versión mayor 4.0.0

  • Las restricciones son el último parámetro de la función

    • Usando la antigua estructura de restricciones

Utilice en su lugar pgr_trsp - Proposed (Uno a Uno).

SELECT * FROM pgr_trsp(
  $$SELECT id, source, target, cost, reverse_cost
    FROM edges WHERE id != 16$$,
  $$SELECT * FROM new_restrictions$$,
  15, 16);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |        15 |      16 |   15 |    3 |    1 |        0
   2 |        2 |        15 |      16 |   10 |    5 |    1 |        1
   3 |        3 |        15 |      16 |   11 |   11 |    1 |        2
   4 |        4 |        15 |      16 |   12 |   13 |    1 |        3
   5 |        5 |        15 |      16 |   17 |   15 |    1 |        4
   6 |        6 |        15 |      16 |   16 |   -1 |    0 |        5
(6 rows)

  • La nueva estructura de restricciones han sido utilizados.

    • Es el segundo parámetro.

  • Se han eliminado la fundición de tipos.

  • pgr_trsp - Proposed:

    • Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.

    • Acepta ANY-INTEGER sobre tipos integrales

    • Acepta ANY-NUMERICAL sobre tipos de puntos flotantes

    • La bandera directed tiene valor de facto de true.

      • Usa el mismo valor de la consulta original.

      • En este ejemplo true que es el valor de facto.

        • Se ha omitido la bandera y se ha utilizado el valor por defecto.

Cuando la necesidad de utilizar estrictamente los mismos nombres (sin importancia) y los tipos de la función han sido migradas entonces:

SELECT seq, node::INTEGER AS id1, edge::INTEGER AS id2, cost
FROM pgr_trsp(
  $$SELECT id, source, target, cost, reverse_cost
    FROM edges WHERE id != 16$$,
  $$SELECT * FROM new_restrictions$$,
  15, 16);
 seq | id1 | id2 | cost
-----+-----+-----+------
   1 |  15 |   3 |    1
   2 |  10 |   5 |    1
   3 |  11 |  11 |    1
   4 |  12 |  13 |    1
   5 |  17 |  15 |    1
   6 |  16 |  -1 |    0
(6 rows)

  • id1 es el nodo

  • id2 es la arista

Migración de pgr_trsp (Aristas)

Firma que serán migrada:

pgr_trsp(sql text, source_edge integer, source_pos float8,
                 target_edge integer, target_pos float8,
                 directed boolean, has_rcost boolean
                 [,restrict_sql text]);
RETURNS SETOF (seq, id1, id2, cost)
  • Los tipos integrales de sql solo pueden ser INTEGER.

  • El tipo de punto flotante del sql solo pueden ser FLOAT.

  • La bandera directed es obligatoria.

    • No tiene un valor de facto.

  • No auto-detecta si la columna``reverse_cost`` existe.

    • El usuario debe de tener cuidado al coincidir la existencia de la columna con el valor del parámetro has_rcost.

  • Las restricciones de consulta interna son opcionales.

Para los siguientes puntos la guía de migración se utilizara:

SELECT pid, edge_id, fraction, side FROM pointsOfInterest
WHERE pid IN (3, 4);
 pid | edge_id | fraction | side
-----+---------+----------+------
   3 |      12 |      0.6 | l
   4 |       6 |      0.3 | r
(2 rows)

Migra al user:

Migrando pgr_trsp (Aristas) usando pgr_withPoints

La siguiente consulta no tiene restricciones.

SELECT * FROM pgr_trsp(
  $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost
    FROM edges$$,
  6, 0.3, 12, 0.6,
  true, true);
WARNING:  pgr_trsp(text,integer,float,integer,float,boolean,boolean) deprecated signature on v3.4.0
 seq | id1 | id2 | cost
-----+-----+-----+------
   0 |  -1 |   6 |  0.7
   1 |   3 |   7 |    1
   2 |   7 |  10 |    1
   3 |   8 |  12 |  0.6
   4 |  -2 |  -1 |    0
(5 rows)

  • Un mensaje sobre lo obsoleto se enseña

    • Funciones obsoletas se eliminaran en la siguiente versión mayor 4.0.0

Utilizar en su lugar pgr_withPoints - Propuesto.

SELECT * FROM pgr_withPoints(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT pid, edge_id, fraction FROM pointsOfInterest WHERE pid IN (4, 3)$$,
  -4, -3,
  details => false);
 seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
   1 |        1 |   -4 |    6 |  0.7 |        0
   2 |        2 |    3 |    7 |    1 |      0.7
   3 |        3 |    7 |   10 |    1 |      1.7
   4 |        4 |    8 |   12 |  0.6 |      2.7
   5 |        5 |   -3 |   -1 |    0 |      3.3
(5 rows)

  • Se han eliminado la fundición de tipos.

  • No enseña detalles, pues las funciones obsoletas no enseñan detalles.

  • pgr_withPoints - Propuesto:

    • Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.

    • Acepta ANY-INTEGER sobre tipos integrales

    • Acepta ANY-NUMERICAL sobre tipos de puntos flotantes

    • La bandera directed tiene valor de facto de true.

      • Usa el mismo valor de la consulta original.

      • En este ejemplo true que es el valor de facto.

        • Se ha omitido la bandera y se ha utilizado el valor por defecto.

    • La consulta de puntos con incluye la columna side.

Cuando la necesidad de utilizar estrictamente los mismos nombres (sin importancia) y tipos , y los valores de nodo de la función han sido migradas entonces:

SELECT seq, node::INTEGER AS id1, edge::INTEGER AS id2, cost
FROM pgr_withPoints(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT * FROM (VALUES (1, 6, 0.3),(2, 12, 0.6)) AS t(pid, edge_id, fraction)$$,
  -1, -2,
  details => false);
 seq | id1 | id2 | cost
-----+-----+-----+------
   1 |  -1 |   6 |  0.7
   2 |   3 |   7 |    1
   3 |   7 |  10 |    1
   4 |   8 |  12 |  0.6
   5 |  -2 |  -1 |    0
(5 rows)

  • id1 es el nodo

  • id2 es la arista

Migrando``pgr_trsp`` (Aristas) utilizando pgr_trsp_withPoints

La siguiente consulta tiene restricciones.

SELECT * FROM pgr_trsp(
  $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edges$$,
  6, 0.3, 12, 0.6, true, true,
  $$SELECT to_cost, target_id::INTEGER, via_path FROM old_restrictions$$);
WARNING:  pgr_trsp(text,integer,float,integer,float,boolean,boolean) deprecated signature on v3.4.0
 seq | id1 | id2 | cost
-----+-----+-----+------
   0 |  -1 |   6 |  0.7
   1 |   3 |   7 |    1
   2 |   7 |   8 |    1
   3 |  11 |   9 |    1
   4 |  16 |  16 |    1
   5 |  15 |   3 |    1
   6 |  10 |   2 |    1
   7 |   6 |   4 |    1
   8 |   7 |  10 |    1
   9 |   8 |  12 |  0.6
(10 rows)

  • Un mensaje sobre lo obsoleto se enseña

    • Funciones obsoletas se eliminaran en la siguiente versión mayor 4.0.0

  • Las restricciones son el último parámetro de la función

    • Usando la antigua estructura de restricciones

Utilizar en su lugar pgr_trsp_withPoints - Proposed.

SELECT * FROM pgr_trsp_withPoints(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT * FROM new_restrictions$$,
  $$SELECT pid, edge_id, fraction FROM pointsOfInterest WHERE pid IN (4, 3)$$,
  -4, -3,
  details => false);
 seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
   1 |        1 |        -4 |      -3 |   -4 |    6 |  0.7 |        0
   2 |        2 |        -4 |      -3 |    3 |    7 |    1 |      0.7
   3 |        3 |        -4 |      -3 |    7 |    8 |    1 |      1.7
   4 |        4 |        -4 |      -3 |   11 |    9 |    1 |      2.7
   5 |        5 |        -4 |      -3 |   16 |   16 |    1 |      3.7
   6 |        6 |        -4 |      -3 |   15 |    3 |    1 |      4.7
   7 |        7 |        -4 |      -3 |   10 |    2 |    1 |      5.7
   8 |        8 |        -4 |      -3 |    6 |    4 |    1 |      6.7
   9 |        9 |        -4 |      -3 |    7 |   10 |    1 |      7.7
  10 |       10 |        -4 |      -3 |    8 |   12 |  0.6 |      8.7
  11 |       11 |        -4 |      -3 |   -3 |   -1 |    0 |      9.3
(11 rows)

  • La nueva estructura de restricciones han sido utilizados.

    • Es el segundo parámetro.

  • Se han eliminado la fundición de tipos.

  • No enseña detalles, pues las funciones obsoletas no enseñan detalles.

  • pgr_trsp_withPoints - Proposed:

    • Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.

    • Acepta ANY-INTEGER sobre tipos integrales

    • Acepta ANY-NUMERICAL sobre tipos de puntos flotantes

    • La bandera directed tiene valor de facto de true.

      • Usa el mismo valor de la consulta original.

      • En este ejemplo true que es el valor de facto.

        • Se ha omitido la bandera y se ha utilizado el valor por defecto.

    • La consulta de puntos con incluye la columna side.

Cuando la necesidad de utilizar estrictamente los mismos nombres (sin importancia) y tipos , y los valores de nodo de la función han sido migradas entonces:

SELECT seq, node::INTEGER AS id1, edge::INTEGER AS id2, cost
FROM pgr_trsp_withPoints(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT * FROM new_restrictions$$,
  $$SELECT * FROM (VALUES (1, 6, 0.3),(2, 12, 0.6)) AS t(pid, edge_id, fraction)$$,
  -1, -2,
  details => false)
WHERE edge != -1;
 seq | id1 | id2 | cost
-----+-----+-----+------
   1 |  -1 |   6 |  0.7
   2 |   3 |   7 |    1
   3 |   7 |   8 |    1
   4 |  11 |   9 |    1
   5 |  16 |  16 |    1
   6 |  15 |   3 |    1
   7 |  10 |   2 |    1
   8 |   6 |   4 |    1
   9 |   7 |  10 |    1
  10 |   8 |  12 |  0.6
(10 rows)

  • id1 es el nodo

  • id2 es la arista

Migraciones de pgr_trspViaVertices

Firma que serán migrada:

pgr_trspViaVertices(sql text, vids integer[],
                  directed boolean, has_rcost boolean
                  [, turn_restrict_sql text]);
RETURNS SETOF (seq, id1, id2, id3, cost)
  • Los tipos enteros de las Consultas de Aristas solo pueden ser ENTEROS.

  • El tipo de punto flotante del Edges SQL solo puede ser FLOAT.

  • La bandera directed es obligatoria.

    • No tiene un valor de facto.

  • No auto-detecta si la columna``reverse_cost`` existe.

    • El usuario debe de tener cuidado al coincidir la existencia de la columna con el valor del parámetro has_rcost.

  • Las restricciones de consulta interna son opcionales.

Migra al user:

Migrando pgr_trspViaVertices usando pgr_dijkstraVia

La siguiente consulta no tiene restricciones.

SELECT * FROM pgr_trspViaVertices(
  $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edges$$,
  ARRAY[6, 3, 6],
  true, true);
WARNING:  pgr_trspViaVertices(text,anyarray,boolean,boolean,text) deprecated function on v3.4.0
 seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
   1 |   1 |   6 |   4 |    1
   2 |   1 |   7 |   7 |    1
   3 |   2 |   3 |   7 |    1
   4 |   2 |   7 |   4 |    1
   5 |   2 |   6 |  -1 |    0
(5 rows)

  • Un mensaje sobre lo obsoleto se enseña

    • Funciones obsoletas se eliminaran en la siguiente versión mayor 4.0.0

Usar pgr_dijkstraVia - Propuesto en su lugar.

SELECT * FROM pgr_dijkstraVia(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  ARRAY[6, 3, 6]);
 seq | path_id | path_seq | start_vid | end_vid | node | edge | cost | agg_cost | route_agg_cost
-----+---------+----------+-----------+---------+------+------+------+----------+----------------
   1 |       1 |        1 |         6 |       3 |    6 |    4 |    1 |        0 |              0
   2 |       1 |        2 |         6 |       3 |    7 |    7 |    1 |        1 |              1
   3 |       1 |        3 |         6 |       3 |    3 |   -1 |    0 |        2 |              2
   4 |       2 |        1 |         3 |       6 |    3 |    7 |    1 |        0 |              2
   5 |       2 |        2 |         3 |       6 |    7 |    4 |    1 |        1 |              3
   6 |       2 |        3 |         3 |       6 |    6 |   -2 |    0 |        2 |              4
(6 rows)

  • Se han eliminado la fundición de tipos.

  • pgr_dijkstraVia - Propuesto:

    • Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.

    • Acepta ANY-INTEGER sobre tipos integrales

    • Acepta ANY-NUMERICAL sobre tipos de puntos flotantes

    • La bandera directed tiene valor de facto de true.

      • Usa el mismo valor de la consulta original.

      • En este ejemplo true que es el valor de facto.

        • Se ha omitido la bandera y se ha utilizado el valor por defecto.

    • La consulta de puntos con incluye la columna side.

Cuando la necesidad de utilizar estrictamente los mismos nombres (sin importancia) y los tipos de la función han sido migradas entonces:

SELECT row_number() over(ORDER BY seq) AS seq,
  path_id::INTEGER AS id1, node::INTEGER AS id2,
  CASE WHEN edge >= 0 THEN edge::INTEGER ELSE -1 END AS id3, cost::FLOAT
FROM pgr_dijkstraVia(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  ARRAY[6, 3, 6])
WHERE edge != -1;
 seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
   1 |   1 |   6 |   4 |    1
   2 |   1 |   7 |   7 |    1
   3 |   2 |   3 |   7 |    1
   4 |   2 |   7 |   4 |    1
   5 |   2 |   6 |  -1 |    0
(5 rows)

  • id1 es el identificador de camino

  • id2 es el nodo

  • id3 es la arista

Migrando pgr_trspViaVertices usando pgr_trspVia

La siguiente consulta tiene restricciones.

SELECT * FROM pgr_trspViaVertices(
  $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edges$$,
  ARRAY[6, 3, 6],
  true, true,
  $$SELECT to_cost, target_id::INTEGER, via_path FROM old_restrictions$$);
WARNING:  pgr_trspViaVertices(text,anyarray,boolean,boolean,text) deprecated function on v3.4.0
 seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
   1 |   1 |   6 |   4 |    1
   2 |   1 |   7 |   8 |    1
   3 |   1 |  11 |   9 |    1
   4 |   1 |  16 |  16 |    1
   5 |   1 |  15 |   3 |    1
   6 |   1 |  10 |   5 |    1
   7 |   1 |  11 |   8 |    1
   8 |   1 |   7 |   7 |    1
   9 |   2 |   3 |   7 |    1
  10 |   2 |   7 |   4 |    1
  11 |   2 |   6 |  -1 |    0
(11 rows)

  • Un mensaje sobre lo obsoleto se enseña

    • Funciones obsoletas se eliminaran en la siguiente versión mayor 4.0.0

  • Las restricciones son el último parámetro de la función

    • Usando la antigua estructura de restricciones

Usar pgr_trspVia - Proposed en su lugar.

SELECT * FROM pgr_trspVia(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT * FROM new_restrictions$$,
  ARRAY[6, 3, 6]);
 seq | path_id | path_seq | start_vid | end_vid | node | edge | cost | agg_cost | route_agg_cost
-----+---------+----------+-----------+---------+------+------+------+----------+----------------
   1 |       1 |        1 |         6 |       3 |    6 |    4 |    1 |        0 |              0
   2 |       1 |        2 |         6 |       3 |    7 |    8 |    1 |        1 |              1
   3 |       1 |        3 |         6 |       3 |   11 |    9 |    1 |        2 |              2
   4 |       1 |        4 |         6 |       3 |   16 |   16 |    1 |        3 |              3
   5 |       1 |        5 |         6 |       3 |   15 |    3 |    1 |        4 |              4
   6 |       1 |        6 |         6 |       3 |   10 |    5 |    1 |        5 |              5
   7 |       1 |        7 |         6 |       3 |   11 |    8 |    1 |        6 |              6
   8 |       1 |        8 |         6 |       3 |    7 |    7 |    1 |        7 |              7
   9 |       1 |        9 |         6 |       3 |    3 |   -1 |    0 |        8 |              8
  10 |       2 |        1 |         3 |       6 |    3 |    7 |    1 |        0 |              8
  11 |       2 |        2 |         3 |       6 |    7 |    4 |    1 |        1 |              9
  12 |       2 |        3 |         3 |       6 |    6 |   -2 |    0 |        2 |             10
(12 rows)

  • La nueva estructura de restricciones han sido utilizados.

    • Es el segundo parámetro.

  • Se han eliminado la fundición de tipos.

  • pgr_trspVia - Proposed:

    • Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.

    • Acepta ANY-INTEGER sobre tipos integrales

    • Acepta ANY-NUMERICAL sobre tipos de puntos flotantes

    • La bandera directed tiene valor de facto de true.

      • Usa el mismo valor de la consulta original.

      • En este ejemplo true que es el valor de facto.

        • Se ha omitido la bandera y se ha utilizado el valor por defecto.

    • La consulta de puntos con incluye la columna side.

Cuando la necesidad de utilizar estrictamente los mismos nombres (sin importancia) y los tipos de la función han sido migradas entonces:

SELECT row_number() over(ORDER BY seq) AS seq,
  path_id::INTEGER AS id1, node::INTEGER AS id2,
  CASE WHEN edge >= 0 THEN edge::INTEGER ELSE -1 END AS id3, cost::FLOAT
FROM pgr_trspVia(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT * FROM new_restrictions$$,
  ARRAY[6, 3, 6])
WHERE edge != -1;
 seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
   1 |   1 |   6 |   4 |    1
   2 |   1 |   7 |   8 |    1
   3 |   1 |  11 |   9 |    1
   4 |   1 |  16 |  16 |    1
   5 |   1 |  15 |   3 |    1
   6 |   1 |  10 |   5 |    1
   7 |   1 |  11 |   8 |    1
   8 |   1 |   7 |   7 |    1
   9 |   2 |   3 |   7 |    1
  10 |   2 |   7 |   4 |    1
  11 |   2 |   6 |  -1 |    0
(11 rows)

  • id1 es el identificador de camino

  • id2 es el nodo

  • id3 es la arista

Migration of pgr_trspViaEdges

In this section this set of points is going to be used:

SELECT pid, edge_id, fraction FROM pointsOfInterest WHERE pid IN (3, 4, 6);
 pid | edge_id | fraction
-----+---------+----------
   3 |      12 |      0.6
   4 |       6 |      0.3
   6 |       4 |      0.7
(3 rows)

Migrating pgr_trspViaEdges using pgr_withPointsVia

Using pgr_withPointsVia - Proposed.

SELECT * FROM pgr_withPointsVia(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT pid, edge_id, fraction FROM pointsOfInterest WHERE pid IN (3, 4, 6)$$,
  ARRAY[-4, -3, -6],
  details => false);
 seq | path_id | path_seq | start_vid | end_vid | node | edge | cost | agg_cost | route_agg_cost
-----+---------+----------+-----------+---------+------+------+------+----------+----------------
   1 |       1 |        1 |        -4 |      -3 |   -4 |    6 |  0.7 |        0 |              0
   2 |       1 |        2 |        -4 |      -3 |    3 |    7 |    1 |      0.7 |            0.7
   3 |       1 |        3 |        -4 |      -3 |    7 |   10 |    1 |      1.7 |            1.7
   4 |       1 |        4 |        -4 |      -3 |    8 |   12 |  0.6 |      2.7 |            2.7
   5 |       1 |        5 |        -4 |      -3 |   -3 |   -1 |    0 |      3.3 |            3.3
   6 |       2 |        1 |        -3 |      -6 |   -3 |   12 |  0.4 |        0 |            3.3
   7 |       2 |        2 |        -3 |      -6 |   12 |   13 |    1 |      0.4 |            3.7
   8 |       2 |        3 |        -3 |      -6 |   17 |   15 |    1 |      1.4 |            4.7
   9 |       2 |        4 |        -3 |      -6 |   16 |    9 |    1 |      2.4 |            5.7
  10 |       2 |        5 |        -3 |      -6 |   11 |    8 |    1 |      3.4 |            6.7
  11 |       2 |        6 |        -3 |      -6 |    7 |    4 |  0.3 |      4.4 |            7.7
  12 |       2 |        7 |        -3 |      -6 |   -6 |   -2 |    0 |      4.7 |              8
(12 rows)

When the need of using the same (meaningless) names and and strict types then convert the result to the deprecated function columns:

  • id1 es el identificador de camino

  • id2 es el nodo

  • id3 es la arista

SELECT row_number() over(ORDER BY seq) AS seq,
path_id::INTEGER AS id1, node::INTEGER AS id2,
CASE WHEN edge >= 0 THEN edge::INTEGER ELSE -1 END AS id3, cost::FLOAT
FROM pgr_withPointsVia(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT pid, edge_id, fraction FROM pointsOfInterest WHERE pid IN (3, 4, 6)$$,
  ARRAY[-4, -3, -6],
  details => false);
 seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
   1 |   1 |  -4 |   6 |  0.7
   2 |   1 |   3 |   7 |    1
   3 |   1 |   7 |  10 |    1
   4 |   1 |   8 |  12 |  0.6
   5 |   1 |  -3 |  -1 |    0
   6 |   2 |  -3 |  12 |  0.4
   7 |   2 |  12 |  13 |    1
   8 |   2 |  17 |  15 |    1
   9 |   2 |  16 |   9 |    1
  10 |   2 |  11 |   8 |    1
  11 |   2 |   7 |   4 |  0.3
  12 |   2 |  -6 |  -1 |    0
(12 rows)

Migrating pgr_trspViaEdges using pgr_trspVia_withPoints

Usar pgr_trspVia_withPoints - Proposed en su lugar.

SELECT * FROM pgr_trspVia_withPoints(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT * FROM new_restrictions$$,
  $$SELECT pid, edge_id, fraction FROM pointsOfInterest WHERE pid IN (3, 4, 6)$$,
  ARRAY[-4, -3, -6],
  details => false);
 seq | path_id | path_seq | start_vid | end_vid | node | edge | cost | agg_cost | route_agg_cost
-----+---------+----------+-----------+---------+------+------+------+----------+----------------
   1 |       1 |        1 |        -4 |      -3 |   -4 |    6 |  0.7 |        0 |              0
   2 |       1 |        2 |        -4 |      -3 |    3 |    7 |    1 |      0.7 |            0.7
   3 |       1 |        3 |        -4 |      -3 |    7 |    4 |  0.6 |      1.7 |            1.7
   4 |       1 |        4 |        -4 |      -3 |    7 |   10 |    1 |      2.3 |            2.3
   5 |       1 |        5 |        -4 |      -3 |    8 |   12 |  0.6 |      3.3 |            3.3
   6 |       1 |        6 |        -4 |      -3 |   -3 |   -1 |    0 |      3.9 |            3.9
   7 |       2 |        1 |        -3 |      -6 |   -3 |   12 |  0.4 |        0 |            3.9
   8 |       2 |        2 |        -3 |      -6 |   12 |   13 |    1 |      0.4 |            4.3
   9 |       2 |        3 |        -3 |      -6 |   17 |   15 |    1 |      1.4 |            5.3
  10 |       2 |        4 |        -3 |      -6 |   16 |    9 |    1 |      2.4 |            6.3
  11 |       2 |        5 |        -3 |      -6 |   11 |    8 |    1 |      3.4 |            7.3
  12 |       2 |        6 |        -3 |      -6 |    7 |    4 |  0.3 |      4.4 |            8.3
  13 |       2 |        7 |        -3 |      -6 |   -6 |   -2 |    0 |      4.7 |            8.6
(13 rows)

When the need of using the same (meaningless) names and and strict types then convert the result to the deprecated function columns:

  • id1 es el identificador de camino

  • id2 es el nodo

  • id3 es la arista

SELECT row_number() over(ORDER BY seq) AS seq,
path_id::INTEGER AS id1, node::INTEGER AS id2,
CASE WHEN edge >= 0 THEN edge::INTEGER ELSE -1 END AS id3, cost::FLOAT
FROM pgr_trspVia_withPoints(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT * FROM new_restrictions$$,
  $$SELECT * FROM (VALUES (1, 6, 0.3),(2, 12, 0.6),(3, 4, 0.7)) AS t(pid, edge_id, fraction)$$,
  ARRAY[-1, -2, -3],
  details => false);
 seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
   1 |   1 |  -1 |   6 |  0.7
   2 |   1 |   3 |   7 |    1
   3 |   1 |   7 |   4 |  0.6
   4 |   1 |   7 |  10 |    1
   5 |   1 |   8 |  12 |  0.6
   6 |   1 |  -2 |  -1 |    0
   7 |   2 |  -2 |  12 |  0.4
   8 |   2 |  12 |  13 |    1
   9 |   2 |  17 |  15 |    1
  10 |   2 |  16 |   9 |    1
  11 |   2 |  11 |   8 |    1
  12 |   2 |   7 |   4 |  0.3
  13 |   2 |  -3 |  -1 |    0
(13 rows)

Ver también

Índices y tablas