在postgresql函数中动态命名表

时间:2014-01-28 16:50:45

标签: postgresql database-design

所以我有一张表,由于某些设计原因,不能使用外键映射到其他实体。所以我正在研究一个被安全删除媒体表中条目的函数。目前我已经编写了使用此资源作为基本功能的函数,作为如何将表名动态插入查询(http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN)的指南。目前我的查询编写如下

DECLARE
    rows_returned numeric;
    is_media boolean;
BEGIN 
    DELETE FROM solo_media WHERE entity_id = row_to_delete;

EXECUTE "DELETE FROM $1  WHERE id = $2;" INTO rows_returned USING table_name, row_to_delete;
END;

当它运行时(使用table_name和row_to_delete传入参数)我收到错误

  

错误:列“DELETE FROM $ 1 WHERE id = $ 2;”不存在   第1行:选择“DELETE FROM $ 1 WHERE id = $ 2;”                  ^   QUERY:SELECT“DELETE FROM $ 1 WHERE id = $ 2;”   语境:PL / pgSQL函数“safe_del”第7行在EXECUTE语句

调用它时
SELECT safe_del(tableName, rowNumber);

1 个答案:

答案 0 :(得分:0)

正如Milen A. Radev指出我使用错误的字符来识别我的字符串,我将其转换为美元转义字符串,并解决了问题。