我有2个表,TableA和TableB。 TableB有一个指向TableA的fk字段。
我需要对TableA使用DELETE语句,当删除其中的记录时,我需要删除TableA中与该记录相关的所有记录。非常基本。
begin;
DELETE FROM TableB
WHERE nu_fornecedor = $1;
DELETE FROM TableA
WHERE nu_fornecedor = $1;
commit;
此字符串传递给pg_prepare(),但后来我收到错误
ERROR: cannot insert multiple commands into a prepared statement
好的,但是我需要在同一个事务中运行这两个命令,我不能执行2个单独的语句。我试着在没有begin-commit的情况下使用并得到同样的错误。
知道该怎么做吗?
答案 0 :(得分:1)
为了理解发生了什么以及你的选择,让我解释一下准备好的陈述是什么以及它不是什么。您可以使用pg_prepare,但仅用于单独的语句,而不是整个事务。
准备好的语句是递交给PostgreSQL的语句,然后将其解析并存储为解析树以供将来使用。在第一次执行时,将使用提供的输入计划解析树,并执行该计划,并将计划缓存以供将来使用。通常,使用预准备语句是没有意义的,除非你想重用查询计划(即执行大量相同的更新语句,大致相同的行数),所有这些都在同一个事务中。
如果您想要的东西可以让您从分析树中分离参数但不会缓存计划,请参阅PHP文档中的pg_query_param()。这可能就是你想要的。