从动态表名中选择

时间:2010-07-21 13:27:41

标签: sql django postgresql

考虑这个问题。

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

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

DJango人可能已经猜到了,'merc_benz'是同一个数据库中的表名。我想编写一些SQL迁移,我需要从这些动态表名中选择结果。

如何使用变量 name 作为表名?

2 个答案:

答案 0 :(得分:1)

像这样......(见RETURN QUERY EXECUTE in the plpgsql portion of the manual

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;

如果你想要返回多于一个类型的单个列,要么创建一个具有代表性的TYPE,或者如果你正在使用表的所有列,那么它就变得有点复杂了表名。您还可以指定多个OUT参数。

答案 1 :(得分:0)

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

我认为基本答案是EXECUTE IMMEDIATE