PostgreSQL, как создать группу записей, представляющих матрицу значений? - PullRequest
0 голосов
/ 23 марта 2011

По-прежнему топологическими базовыми полями являются x, y, z, gradient, tmestamp, user. Сейчас я нахожусь в проблеме заполнения своей базы данными.У меня есть несколько патчей, которые имеют одинаковую характеристику, но разные позиции.Я решил эту проблему подготовкой оператора вставки и двух вложенных циклов, меняющих x, y (z исправлено при заполнении стратегии (по крайней мере, на данный момент).

Программный подход медленный, очень медленно, поэтому я попытался воспроизвести его на SQL, и дошел до:

insert into topo12 ("x","y","z","gradient","user","refresh")
select generate_series(2,4),generate_series(2,4),1024,12222563,'toto',1234567878;

Но это не дает (логично я знаю, но ...) матрицу, но вектор и так далекоЯ изо всех сил пытаюсь заставить работать дополнительные подзапросы, поэтому любые подсказки приветствуются.

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

Я думаю, что вам нужно объединение, поэтому вы можете получить декартово произведение двух серий:

> SELECT x, y FROM generate_series(1,2) AS x, generate_series(1,2) AS y;
 x | y 
---+---
 1 | 1
 1 | 2
 2 | 1
 2 | 2
(4 rows)

В настоящее время вы выбираете одну из двух функций, возвращающих множество.Я не понимаю, какой должна быть семантика, но она не производит декартово произведение значений, как вы, вероятно, хотите:

> SELECT generate_series(1,2), generate_series(1,2);
 generate_series | generate_series 
-----------------+-----------------
               1 |               1
               2 |               2
(2 rows)

> SELECT generate_series(1,2), generate_series(1,3);
 generate_series | generate_series 
-----------------+-----------------
               1 |               1
               2 |               2
               1 |               3
               2 |               1
               1 |               2
               2 |               3
(6 rows)
1 голос
/ 04 мая 2013
insert into topo12 ("x","y","z","gradient","user","refresh")
select
    (random() * 2)::int + 2,
    (random() * 2)::int + 2
    ,1024,12222563,'toto',1234567878
from generate_series(1, 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...