Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用django加载自定义sql函数_Django_Postgresql - Fatal编程技术网

如何使用django加载自定义sql函数

如何使用django加载自定义sql函数,django,postgresql,Django,Postgresql,我试图使用Django的初始SQL数据功能来创建SQL函数。文档说明我可以这样做: Django提供了一个钩子,用于在运行migrate时,在CREATETABLE语句之后执行数据库任意SQL。您可以使用此钩子填充默认记录,也可以创建SQL函数、视图、触发器等 在谷歌搜索之后,我发现django的customsql代码拆分了所有sql文件,并逐行运行它们,从而产生了这个错误 未能为myapp安装自定义SQL。somemodel模型:在“$$BEGIN;”处或附近未终止的美元引号字符串 有没有公

我试图使用Django的初始SQL数据功能来创建SQL函数。文档说明我可以这样做:

Django提供了一个钩子,用于在运行migrate时,在CREATETABLE语句之后执行数据库任意SQL。您可以使用此钩子填充默认记录,也可以创建SQL函数、视图、触发器等

在谷歌搜索之后,我发现django的customsql代码拆分了所有sql文件,并逐行运行它们,从而产生了这个错误

未能为myapp安装自定义SQL。somemodel模型:在“$$BEGIN;”处或附近未终止的美元引号字符串


有没有公认的解决办法?还是加载自定义sql函数的更好方法

是的,我以前见过这个问题。如果在应用程序的sql/.sql中粘贴多行函数,如下所示:

CREATE或REPLACE函数增量(i integer)将整数返回为$$
开始
返回i+1;
结束;
$$语言plpgsql;

您将看到所看到的错误,即:

未能为mysite安装自定义SQL。轮询模型:在“$$BEGIN RETURN i+1;”处或附近未终止的美元引号字符串 第1行:。。。函数增量(i integer)将整数返回为$$BEGIN R

我认为你应该能够通过将函数定义压缩到一行来解决这个问题,例如

CREATE或REPLACE函数increment(i integer)将整数返回为$$BEGIN RETURN i+1;完;$$语言plpgsql;

看起来这个错误会影响任何多行函数(美元报价和单报价)。我在Django 1.6上进行了测试,不知道它是否已经修复