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

标签 django postgresql

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

https://docs.djangoproject.com/en/1.6/howto/initial-data/#providing-initial-sql-data

Django provides a hook for passing the database arbitrary SQL that’s executed just after the CREATE TABLE statements when you run migrate. You can use this hook to populate default records, or you could also create SQL functions, views, triggers, etc.

经过一番谷歌搜索后,我发现 django 的 customsql 代码会拆分任何 sql 文件并逐行运行它们,从而产生此错误,

Failed to install custom SQL for myapp.somemodel model: unterminated dollar-quoted string at or near "$$ BEGIN;"

是否有可接受的解决方法?或者加载自定义 sql 函数的更好方法?

最佳答案

是的,我以前见过这个问题。如果您像这样在应用程序的 sql/.sql 中添加多行函数:

创建或替换函数 increment(i integer) RETURNS integer AS $$ 开始 返回 i + 1; 结尾; $$ 语言 plpgsql;

你会得到你看到的错误,即类似的东西:

Failed to install custom SQL for mysite.Poll model: unterminated dollar-quoted string at or near "$$ BEGIN RETURN i + 1;" LINE 1: ... FUNCTION increment(i integer) RETURNS integer AS $$ BEGIN R...

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

创建或替换函数 increment(i integer) RETURNS integer AS $$BEGIN RETURN i + 1;结尾; $$ 语言 plpgsql;

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

关于django - 如何使用django加载自定义sql函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24988712/

相关文章:

django - 实现 UUID 作为主键

python - Django 过滤器 LIKE 数组 ORM 中的查询(图标)

php - pgSQL "ERROR: invalid byte sequence for encoding "UTF 8": 0x86"解析电子邮件时

ruby-on-rails - 使用针对 PostgreSQL 的数组参数在 Rails 中执行原始 SQL 查询

postgresql - 在没有程序代码的情况下处理 PostgresQL 中的除法错误 - 这可能吗?

postgresql - 使用 Azure Database for PostgreSQL 灵活服务器的大延迟

postgresql - 具有复合主键的表中记录的顺序是什么

django - 如何从 Django 多对多字段获取数据?

python - Django 中的 Forloop.counter

python - Django 字典键,for 循环中的值不起作用