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.
Migrando funciones:
pgr_maxCardinalityMatch funciona solamente para grafos no dirigidos, entonces la bandera directed
ha sido removida.
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 .
Advertencia
Todas las funciones obsoletas serán removidas en las siguiente versión mayor 4.0.0
Migration of pgr_dijkstra
¶
Starting from v3.5.0
Signatures to be migrated:
pgr_dijkstra
(One to One)pgr_dijkstra
(One to Many)pgr_dijkstra
(Many to One)
- Before Migration:
Output columns are
(seq, path_seq, [start_vid], [end_vid], node, edge, cost, agg_cost)
Depending on the overload used the columns
start_vid
andend_vid
might be missing:pgr_dijkstra
(One to One) does not havestart_vid
andend_vid
.pgr_dijkstra
(One to Many) does not havestart_vid
.pgr_dijkstra
(Many to One) does not haveend_vid
.
- Migración:
Be aware of the existance of the additional columns.
In
pgr_dijkstra
(One to One)start_vid
contains the start vid parameter value.end_vid
contains the end vid parameter value.
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)
In
pgr_dijkstra
(One to Many)start_vid
contains the start vid parameter value.
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)
In
pgr_dijkstra
(Many to One)end_vid
contains the end vid parameter value.
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)
If needed filter out the added columns, for example:
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)
Migración de pgr_maxCardinalityMatch
¶
Starting from v3.4.0
Firmas que serán migradas:
pgr_maxCardinalityMatch(Edges SQL, [directed])
RETURNS SETOF (seq, edge, source, target)
Migración es necesaria, porque:
Usa
cost
yreverse_cost
en la consulta internaLos resultados son ordenados
Funciona para grafos no dirigidos.
Nueva firma
pgr_maxCardinalityMatch(text)
regresa solamente la columnaedge
.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
ycoming
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
yreverse_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 restricciones¶
Starting from v3.4.0
La estructura de las restricciones ha cambiado:
Estructura de restricciones vieja¶
Sobre las firmas obsoletas:
La columna
rid
es ignoradavia_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 reversoes de tipo
TEXT
\(9\)
está en la columna
target_id
es de tipo
INTEGER
Estructura de nuevas restricciones¶
La columna
id
es ignoradaColumna
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)¶
Starting from v3.4.0
Firmas que serán migradas:
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 serINTEGER
.El tipo de punto flotante del
Edges SQL
solo puede serFLOAT
.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:
pgr_dijkstra cuando no hay restricciones,
pgr_trsp - Proposed (Uno a uno) cuando hay restricciones.
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 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.
-
Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.
Acepta
ANY-INTEGER
sobre tipos integralesAcepta
ANY-NUMERICAL
sobre tipos de puntos flotantesLa bandera
directed
tiene valor de facto detrue
.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 nodoid2
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 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.
-
Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.
Acepta
ANY-INTEGER
sobre tipos integralesAcepta
ANY-NUMERICAL
sobre tipos de puntos flotantesLa bandera
directed
tiene valor de facto detrue
.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 nodoid2
es la arista
Migración de pgr_trsp
(Aristas)¶
Firmas que serán migradas:
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 serINTEGER
.El tipo de punto flotante del
sql
solo pueden serFLOAT
.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:
pgr_withPoints - Propuesto cuando no hay restricciones,
pgr_trsp_withPoints - Proposed (Uno a uno) cuando hay restricciones.
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 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
Utiliza 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.
-
Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.
Acepta
ANY-INTEGER
sobre tipos integralesAcepta
ANY-NUMERICAL
sobre tipos de puntos flotantesLa bandera
directed
tiene valor de facto detrue
.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 nodoid2
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 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 integralesAcepta
ANY-NUMERICAL
sobre tipos de puntos flotantesLa bandera
directed
tiene valor de facto detrue
.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 nodoid2
es la arista
Migraciones de pgr_trspViaVertices
¶
Firmas que serán migradas:
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 serENTEROS
.El tipo de punto flotante del
Edges SQL
solo puede serFLOAT
.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:
pgr_dijkstraVia - Proposed cuando no hay restricciones,
pgr_trspVia - Proposed cuando hay restricciones.
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) is been deprecated
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 - Proposed 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.
-
Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.
Acepta
ANY-INTEGER
sobre tipos integralesAcepta
ANY-NUMERICAL
sobre tipos de puntos flotantesLa bandera
directed
tiene valor de facto detrue
.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 caminoid2
es el nodoid3
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) is been deprecated
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.
-
Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.
Acepta
ANY-INTEGER
sobre tipos integralesAcepta
ANY-NUMERICAL
sobre tipos de puntos flotantesLa bandera
directed
tiene valor de facto detrue
.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 caminoid2
es el nodoid3
es la arista
Migración de pgr_trspViaEdges
¶
Firmas que serán migradas:
pgr_trspViaEdges(sql text, eids integer[], pcts float8[],
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 serENTEROS
.El tipo de punto flotante del
Edges SQL
solo puede serFLOAT
.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, 6);
pid | edge_id | fraction | side
-----+---------+----------+------
3 | 12 | 0.6 | l
4 | 6 | 0.3 | r
6 | 4 | 0.7 | b
(3 rows)
Viajará a travez de los siguientes puntos de la vía \(4\rightarrow3\rightarrow6\)
Migra al user:
pgr_withPointsVia - Proposed cuando no hay restricciones,
pgr_trspVia_withPoints - Proposed cuando hay restricciones.
Migrando pgr_trspViaEdges
usando pgr_withPointsVia
¶
La siguiente consulta no tiene restricciones.
SELECT * FROM pgr_trspViaEdges(
$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edges$$,
ARRAY[6, 12, 4], ARRAY[0.3, 0.6, 0.7],
true, true);
WARNING: pgr_trspViaEdges(text,integer[],float[],boolean,boolean,text) deprecated on v3.4.0
seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
1 | 1 | -1 | 6 | 0.7
2 | 1 | 3 | 7 | 1
3 | 1 | 7 | 10 | 1
4 | 1 | 8 | 12 | 0.6
5 | 1 | -2 | -1 | 0
6 | 2 | -2 | 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.7
12 | 2 | -3 | -2 | 0
(12 rows)
Un mensaje sobre lo obsoleto se enseña
Funciones obsoletas se eliminaran en la siguiente versión mayor 4.0.0
Usar pgr_withPointsVia - Proposed en su lugar.
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)
Se han eliminado la fundición de tipos.
No enseña detalles, pues las funciones obsoletas no enseñan detalles.
-
Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.
Acepta
ANY-INTEGER
sobre tipos integralesAcepta
ANY-NUMERICAL
sobre tipos de puntos flotantesLa bandera
directed
tiene valor de facto detrue
.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 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 * 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 | 10 | 1
4 | 1 | 8 | 12 | 0.6
5 | 1 | -2 | -1 | 0
6 | 2 | -2 | 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 | -3 | -1 | 0
(12 rows)
id1
es el identificador de caminoid2
es el nodoid3
es la arista
Migrando pgr_trspViaEdges
usando pgr_trspVia_withPoints
¶
La siguiente consulta tiene restricciones.
SELECT * FROM pgr_trspViaEdges(
$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edges$$,
ARRAY[6, 12, 4], ARRAY[0.3, 0.6, 0.7],
true, true,
$$SELECT to_cost, target_id::INTEGER, via_path FROM old_restrictions$$);
WARNING: pgr_trspViaEdges(text,integer[],float[],boolean,boolean,text) deprecated on v3.4.0
WARNING: pgr_trsp(text,integer,float,integer,float,boolean,boolean) deprecated on v3.4.0
WARNING: pgr_trsp(text,integer,float,integer,float,boolean,boolean) deprecated on v3.4.0
seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
1 | 1 | -1 | 6 | 0.7
2 | 1 | 3 | 7 | 1
3 | 1 | 7 | 8 | 1
4 | 1 | 11 | 9 | 1
5 | 1 | 16 | 16 | 1
6 | 1 | 15 | 3 | 1
7 | 1 | 10 | 2 | 1
8 | 1 | 6 | 4 | 1
9 | 1 | 7 | 10 | 1
10 | 1 | 8 | 12 | 1
11 | 2 | 12 | 13 | 1
12 | 2 | 17 | 15 | 1
13 | 2 | 16 | 9 | 1
14 | 2 | 11 | 8 | 1
15 | 2 | 7 | 4 | 0.3
(15 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_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)
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_trspVia_withPoints - Proposed:
Auto-detecta si la columna``reverse_cost`` está en la SQL de aristas.
Acepta
ANY-INTEGER
sobre tipos integralesAcepta
ANY-NUMERICAL
sobre tipos de puntos flotantesLa bandera
directed
tiene valor de facto detrue
.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 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)
id1
es el identificador de caminoid2
es el nodoid3
es la arista
Ver también¶
Índices y tablas