标签: postgresql-triggers

如何在触发器功能中使用变量设置?

我想在会话/事务中记录用户的id,使用SET,所以我以后可以在触发器函数中使用它来访问它current_setting.基本上,我正在尝试从之前发布非常相似的票证中选择n2 ,区别在于我正在使用PG 10.1.

我一直在尝试3种设置变量的方法:

  • SET local myvars.user_id = 4,从而在交易中在本地设置;
  • SET myvars.user_id = 4从而将其设置在会话中;
  • SELECT set_config('myvars.user_id', '4', false),取决于最后一个参数,将是前两个选项的快捷方式.

它们都不能在触发器中使用,触发器NULL在获取变量时接收current_setting.这是我设计的用于对其进行故障排除的脚本(可以很容易地与postgres docker镜像一起使用):

database=$POSTGRES_DB
user=$POSTGRES_USER
[ -z "$user" ] && user="postgres"

psql -v ON_ERROR_STOP=1 --username "$user" $database <<-EOSQL
    DROP TRIGGER IF EXISTS add_transition1 ON houses;
    CREATE TABLE IF NOT EXISTS houses (
        id SERIAL NOT NULL,
        name VARCHAR(80),
        created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now(),
        PRIMARY KEY(id)
    );

    CREATE …
Run Code Online (Sandbox Code Playgroud)

postgresql global-variables plpgsql postgresql-triggers

12
推荐指数
3
解决办法
1905
查看次数

从 PostgreSQL 函数运行 Python 脚本

每次在 PostgreSQL 表上执行更新或插入操作时,我都面临一个关于执行 Python 脚本的“小”问题。

此脚本将提取更新或插入的数据并将其写入文件。

环境数据:Ubuntu 18.04(Bionic Beaver)、PostgreSQL 10、Python 3.6

SELECT * FROM pg_available_extensions
WHERE name LIKE '%python%' ORDER BY name;
Run Code Online (Sandbox Code Playgroud)

和输出

姓名 默认版本 安装版本 评论
hstore_plpython2u 1.0 hstore 和 plpython2u 之间的转换
hstore_plpythonu 1.0 hstore 和 plpythonu 之间的转换
ltree_plpython2u 1.0 ltree 和 plpython2u 之间的转换
ltree_plpythonu 1.0 ltree 和 plpythonu 之间的转换
plpython2u 1.0 PL/Python2U 不受信任的过程语言
无名小卒 1.0 1.0 PL/PythonU 不受信任的过程语言

我已经创建了一个 PostgreSQL 函数(我希望在阅读所有文档后一切正常)

CREATE FUNCTION getSomeData()
RETURNS trigger
AS $$
begin
import subprocess
subprocess.call(['/usr/bin/python3', '/some_folder/some_sub_folder/get_data.py'])
end;
$$ …
Run Code Online (Sandbox Code Playgroud)

python database postgresql triggers postgresql-triggers

5
推荐指数
1
解决办法
1512
查看次数

无法删除 PostgreSQL 中的触发器获取错误

我在学习Python之后正在学习PostgreSQL。我关注tutorialspoint.com 网站。

没有问题,直到我创建一个触发器并且它像一个魅力一样工作。

但是当我尝试删除(即删除)触发器时,出现以下错误。

DROP TRIGGER example_trigger;
ERROR:  syntax error at or near ";"
LINE 1: DROP TRIGGER example_trigger;
                                    ^
Run Code Online (Sandbox Code Playgroud)

我不确定为什么会收到此错误。请帮帮我。这是常见的还是我错了?

database postgresql syntax-error sql-drop postgresql-triggers

2
推荐指数
1
解决办法
2315
查看次数