sql - 为我定义的函数创建触发器时,Postgres SQL 中的语法错误?
问题描述
使用此 SQL:
DROP FUNCTION IF EXISTS notify_new_proposed_game();
CREATE FUNCTION notify_new_proposed_game()
RETURNS void
AS 'NOTIFY proposed_game, ''new'';'
LANGUAGE SQL;
DROP TRIGGER IF EXISTS new_proposed_game ON game;
CREATE TRIGGER new_proposed_game
AFTER INSERT
ON game
EXECUTE FUNCTION notify_new_proposed_game();
我收到此错误:
DROP FUNCTION
CREATE FUNCTION
psql:schema.sql:27: NOTICE: trigger "new_proposed_game" for relation "game" does not exist, skipping
DROP TRIGGER
psql:schema.sql:31: ERROR: syntax error at or near "FUNCTION"
LINE 4: EXECUTE FUNCTION notify_new_proposed_game();
我不知道为什么。
我在 SQL 方面处于新手和中级之间,所以它很可能非常简单。
该函数在 PSQL 中手动调用时起作用。
期望的结果:
- 没有错误
- 触发器已设置
解决方案
有几个问题:
语法:你必须使用旧版本的 PostgreSQL,你不能使用
EXECUTE FUNCTION
,但只能EXECUTE PROCEDURE
在CREATE TRIGGER
语句中使用。触发器函数不能用 SQL 编写。您必须使用 PL/pgSQL 或其他一些过程语言。
你的触发函数必须
RETURNS trigger
,不是void
。确保RETURN NEW;
在函数中。
推荐阅读
- c# - Service Fabic - 无法在 Windows 上本地运行 Angular:EPERM:不允许操作
- ruby-on-rails - 状态:206 部分内容 - 多次加载 mp4
- r - 用 R 绘制 sin 函数并将它们定位在 x 轴上
- swift - Xcode如何在UITableView中添加向下滑动动作
- json - 如何从 HTTPContext 的 WebAPI 请求中获取函数参数?
- css - 编译 sass 部分生成具有相同名称的重复类
- javascript - 如何在highcharts中动态显示地图图表反应
- sql - 如何在大查询中查找具有特定列名的所有表和数据集/数据库
- python - 等到桌面应用程序打开并从 python 中的 rpaframework 库加载
- android - 基于点击事件android录制和保存音频