Выбрать из динамических имен таблиц - PullRequest
0 голосов
/ 21 июля 2010

Рассмотрим этот запрос.

SELECT app_label || '_' || model as name from django_content_type where id = 12;

       name        
-------------------
 merc_benz

Возможно, диджеи предположили, что 'merc_benz' - это имя таблицы в том же БД.Я хочу написать некоторые миграции SQL, и мне нужно выбрать результаты из таких динамических имен таблиц.

Как я могу использовать переменную name в качестве имени таблицы ???

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Примерно так ... (см. ВОЗВРАТ ЗАПРОС ВЫПОЛНИТЬ в части руководства plpgsql )

CREATE function dynamic_table_select(v_id int) returns setof text as $$
DECLARE 
    v_table_name text;
BEGIN
    SELECT app_label || '_' || model into 
    v_table_name from django_content_type where id = v_id;
    RETURN QUERY EXECUTE 'SELECT a_text_column from '||quote_ident(v_table_name);
    RETURN;
END
$$ LANGUAGE plpgsql;

Это становится немного сложнее, если вы хотите вернутьодин столбец одного типа - либо создайте типичный ТИП, либо, если вы используете все столбцы таблицы, уже существует ТИП с именем этой таблицы.Вы также можете указать несколько параметров OUT.

0 голосов
/ 21 июля 2010

http://www.postgresql.org/docs/8.1/static/ecpg-dynamic.html

Основной ответ, на мой взгляд, EXECUTE IMMEDIATE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...