Я использую PostgreSQL 11 и PostGIS 2.5.1 и пытаюсь создать новый столбец в существующей таблице с конкретным значением
. Пример таблицы следующий:
CREATE TABLE test (id integer, geom GEOMETRY);
INSERT INTO test (id, geom)
VALUES
(1, ST_GeomFromEWKT('SRID=4326;POINT(-71.00 42.00)')),
(2, ST_GeomFromEWKT('SRID=4326;POINT(52.00 52.00)'));
Если я создаю новый столбец и выполняю вставку в оператор, результат будет похож на декартово произведение
ALTER Table test
ADD wkt_text TEXT;
INSERT INTO test (wkt_text)
SELECT st_astext(a.geom)::text FROM test a, test b
WHERE a.id = b.id;
Результат будет выглядеть следующим образом:
SELECT * FROM test;
id | geom | wkt_text
----+----------------------------------------------------+---------------
1 | 0101000020E61000000000000000C051C00000000000004540 |
2 | 0101000020E61000000000000000004A400000000000004A40 |
| | POINT(-71 42)
| | POINT(52 52)
По какой причине это происходит?Вставка в работает без проблем на таблицах с пустыми столбцами.Как только столбец заполнится значениями, результат будет таким, как описано.
Я получил правильный результат при следующем запросе, но хочу понять, почему.
WITH subquery AS (
SELECT id, st_astext(geom)::text AS wkt_text
FROM test
)
UPDATE test
SET wkt_text=subquery.wkt_text
FROM subquery
WHERE test.id = subquery.id;