好的,我试图通过Cakephp AppShell类运行这个postgresql函数。
CREATE OR REPLACE FUNCTION rdcdev.populatetemptables() RETURNS date AS '
DECLARE
lastSync date;
BEGIN
SELECT INTO lastSync lastsyncdate FROM rdcdev.syncsettings;
INSERT INTO rdcdev.temp_sourcelists (
SELECT *
FROM rdcdev.sourcelists
);
INSERT INTO rdcdev.temp_beamdatas (
SELECT *
FROM rdcdev.beamdatas
WHERE temp_beamdatas.datetime > lastsync
);
INSERT INTO rdcdev.temp_beams (
SELECT *
FROM rdcdev.beams
WHERE temp_beams.datetime > lastsync
);
INSERT INTO rdcdev.temp_logdatas (
SELECT *
FROM rdcdev.logdatas
WHERE temp_logdatas.datetime > lastsync
);
INSERT INTO rdcdev.temp_paramdatas (
SELECT *
FROM rdcdev.paramdatas
WHERE temp_paramdatas.datetime > lastsync
);
RETURN lastSync;
END;
' LANGUAGE 'plpgsql';
正如你所看到的那样,我宁愿能够从一个函数调用它,而不是在cakephp调用中单独调用它们。我已经通过命令行调用它来验证函数是否按预期工作,但它似乎不喜欢通过cakephp中的查询调用来调用它:
class SyncShell extends AppShell
{
...blah blah blah
$SQLcommand = "SELECT rdcdev.populatetemptables();";
$this->Syncsetting->query($SQLcommand);
}
Syncsetting只是数据库中的一种数据模型。代码似乎崩溃而没有在cakephp日志中出错,所以我很难弄清楚它为什么不喜欢这样。是因为该函数正在使用SyncSettings之外的表。如果是这样,我需要以某种方式为Cakephp的模型文件夹中的函数创建一个模型类,或者是否有一些特殊的方法来调用Cakephp中的函数,这是我的基本google-foo无法找到的。