Страница 1 из 1
создание слоя из выборки
Добавлено: 05 окт 2010, 10:59
Анна
и еще один вопрос сразу:)
есть слой загруженный в базу, делаю select'ом выборку по некоторому столбцу и теперь хочу сохранить выборку отдельной таблицей (слоем) в базе.
Как это сделать?
Re: создание слоя из выборки
Добавлено: 05 окт 2010, 11:28
KolesovDmitry
Анна писал(а):
есть слой загруженный в базу, делаю select'ом выборку по некоторому столбцу и теперь хочу сохранить выборку отдельной таблицей (слоем) в базе.
У select есть модификация для сохранения результата запроса в таблицу:
SELECT INTO.
Re: создание слоя из выборки
Добавлено: 05 окт 2010, 12:06
Анна
супер, спасибо огромное!
Re: создание слоя из выборки
Добавлено: 05 окт 2010, 17:17
Анна
Еще возник вопрос посложнее:)
Есть таблица точек встреч видов (occurences_tbl). В ней колонка "species" - название вида. Нужно в цикле пройтись по всем уникальным названиям видов и экспортировать все точки встреч для каждого отдельного вида в отдельную же таблицу названную именем вида. Видов более 500, а точек встреч около 200 000, то есть руками ну никак не хочется делать.
Написала вот такой запрос:
Код: Выделить всё
FOR unique_species_names IN SELECT count FROM occurences_tbl GROUP BY species LOOP
EXECUTE SELECT * INTO quote_ident(unique_species_names) FROM occurences_tbl WHERE occurences_tbl.species = quote_ident(unique_species_names);
END LOOP;
но уверена, что не правильный синтаксис. Подскажите, пожалуйста куда смотреть? что корректировать?
Re: создание слоя из выборки
Добавлено: 05 окт 2010, 19:35
Denis Rykov
Поставленную задачу можно решить, например, с помощью PL/Python, если Python присутствует в системе:
Код: Выделить всё
CREATE PROCEDURAL LANGUAGE 'plpythonu' HANDLER plpython_call_handler;
CREATE OR REPLACE FUNCTION tbls()
RETURNS text
AS $$
rv = plpy.execute("SELECT DISTINCT species from occurences_tbl where species<>''")
for i in range(len(rv)):
plpy.execute("SELECT * INTO "+rv[i]['species']+" from occurences_tbl where species='"+rv[i]['species']+"'")
$$ LANGUAGE plpythonu;
select tbls();