2013-11-24 4 views
1

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

можно построить так:

SELECT 'SELECT ' || array_to_string(ARRAY(
select 'o' || '.' || c.column_name 
from information_schema.columns as c 
where table_name = 'final_datas' 
and c.data_type = 'real'), ',') || ' FROM final_datas as o' As sqlstmt 

, что дает, что:

"SELECT o.random,o.struct2d_pred2_num,o.pfam_num,o.transmb_num [...] FROM final_datas as o" 

я хотел бы создать таблицу с этими столбцами. Разумеется, сделайте это, не получится:

create table table2 as (
SELECT 'SELECT ' || array_to_string(ARRAY(
select 'o' || '.' || c.column_name 
from information_schema.columns as c 
where table_name = 'final_datas' 
and c.data_type = 'real'), ',') || ' FROM final_datas as o' As sqlstmt 
) 

Предложения?

+0

Посмотрите в pg_catalog для этого. Запустите 'psql -E', затем' \ d final_datas' внутри него, и вы увидите соответствующие запросы, которые вам нужно запустить. –

ответ

1

Вы должны сгенерировать все заявления CREATE TABLE как динамический SQL:

SELECT 'CREATE TABLE table2 AS SELECT ' || array_to_string(ARRAY(
select 'o' || '.' || c.column_name 
from information_schema.columns as c 
where table_name = 'final_datas' 
and c.data_type = 'real'), ',') || ' FROM final_datas as o' As sqlstmt 

Результат может быть запущен с EXECUTE sqlstmt;

+0

спасибо, он работает! – Kaervas

Смежные вопросы