我想在会话/事务中记录用户的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 表上执行更新或插入操作时,我都面临一个关于执行 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之后正在学习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