问题标签 [mysql-udf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 返回 STRING 的 MySQL UDF 与数据重叠
因为这是我第一次编写 UDF,所以我尝试编写简单的 UDF 来返回传递给 UDF 的相同参数。
代码如下:
我的表有数据;
SELECT c_name FROM tbl;
这将返回数据为:
如果我使用 UDF 执行查询:
SELECT get_arg(c_name) FROM tbl;
这将返回:
看起来当第二行前 5 个字符被实际行数据替换时,字符串的其他部分是来自第一行的垃圾。
为什么会发生这种情况?我应该改变什么功能以避免字符串重叠?
mysql - 在大型更新时从 mysql 触发器向 gearman 发送作业
我正在使用 gearman 的 udf 从更新后触发器向 gearman 发送后台作业。
该文档说明了以下内容:
gman_do* 函数采用可选的第三个参数,即唯一的作业 ID。这允许您在同一个唯一 ID 下提交多个作业,它们将在队列中“合并”以仅运行一次。请注意,gearmand 只会合并队列中或正在运行的作业,它不会在作业完成后跟踪唯一 ID。例如,以下内容确保您只为每个主机运行一次作业:
SELECT gman_do_background("reverse", Host, Host) AS test FROM mysql.user;
这使它看起来已经准备好处理大量的行更新,而不会淹没我的齿轮工的队列。
但是当我一次更新 30k 行时,我的 gearman 守护程序会暂时无法访问,并且“netstat”在 4730 端口上显示 ~30k 连接,我想这可以解释原因。
知道如何在不减慢更新速度的情况下防止冻结发生吗?我只需要在整个更新查询后触发一次 gearman 作业,但据我所知,mysql/mariadb 不处理语句后触发器。
python - 使用 MySQL UDF 执行命令 - sys_exec 不起作用
我正在尝试从 MariaDB 服务器运行 python 脚本。我为此安装了 mysqludf 库。我正在尝试使用 sys_exec 函数运行脚本,但没有结果。我创建了一个测试文件,它只是一个带有“DONE”信息的 .txt 文件。
我以 root 用户身份执行命令,因此我拥有所有权限。运行命令:
SELECT sys_exec('python3 /home/Documents/test.py')
不执行任何操作并返回错误代码 512。运行命令:
SELECT sys_exec('sudo python3 /home/Documents/test.py')
返回错误代码 256。
我已经检查了 apparmor 状态,似乎没有什么问题:
我还仔细检查了 root 是否具有 sudo 权限,如果确实如此。
什么可能导致问题?有什么方法可以从 MariaDB 服务器运行 python 脚本吗?
mysql - MySQL UDF 返回“错误代码:1127。在库中找不到符号 'xx'”
我有一个用 Go 编写的 MySQL UDF,以前可以正常工作,但是如果我现在编译它不再起作用,并显示错误消息
错误代码:1127。在库中找不到符号“get_url_param”
UDF 在 GitHub 上:https ://github.com/StirlingMarketingGroup/mysql-get-url-param
如果我像这样检查旧编译文件的导出
这个文件在运行时工作得很好
但是当我用相同的命令编译相同的代码时
然后以同样的方式检查出口
一切看起来都不错。而且我可以告诉我我正在检查正确的文件,因为所有地址都不同(另外还有一个新行main.get_url_param.stkobj
)。但是这次尝试添加它给了我关于 MySQL 如何在库中找不到符号的错误。
我非常确定编译命令保持不变,并且我认为它与 Go 版本没有任何关系,因为我测试回 Go 1.9 并且它做同样的事情,但仍然无法正常工作。
我已经上传了二进制文件和版本,旧版本可以运行,新版本不可用。两个 .so 文件都以相同的方式复制到我的插件目录,所以我认为这与权限无关。此外,Go func 名称为小写肯定与此无关,因为即使我将函数重命名为 ,行为也是完全相同的GetURLParam
,并且我可以看到导出为nm
.
我确定我错过了一些东西,可能是编译命令,或者可能是一些 cgo 标志,但我不知道那会是什么。
c - 为什么 mkdir() 在 Ubuntu 中运行的 MySQL UDF 上没有执行?
我计划为我的 UDF 创建一个日志文件,该文件将位于/var/log
目录中。所以我调用mkdire("/var/log/my_func",...)
了 C 代码,但是在从 Mysql 和ls调用函数之后,没有创建目录。
我的主要目的是记录 UDF 错误,我也很感激有关如何将 UDF 错误记录到文件的任何提示。
这是代码示例:
我的函数返回一个整数,所以当我评论mkdir并返回一个随机 int 时,返回值显示在 MySQL
提前谢谢。
c++ - 删除 initid->ptr、MySQL 聚合函数 (UDF) 时失去与 MySQL 服务器的连接
我在 C++ 中创建了一个 MySQL 聚合 UDF。我char*
从 MySQL 聚合 UDF 的最终函数返回。在void xxx_deinit(UDF_INIT initid)
我正在释放我的函数使用的任何内存。我通过删除init->ptr
.
我的 deinit 函数:
在 init 函数中,我初始化ptr
如下:
我能够创建 UDF 并将其安装在 MySQL 服务器中。安装后,当我尝试调用该函数时,会弹出一条错误消息,如下所示:
delete initid->ptr;
但是当我从函数中删除 line:时xxx_deinit(UDF_INIT * initid)
,我得到了所需的输出。但我猜这是错误的方法,因为它会导致内存泄漏。此外,相同的语句:delete initid->ptr;
在返回类型的简单 UDF 的情况下不会产生错误char*
。谁能告诉我我在这里做错了什么?任何形式的帮助或建议都会有很大帮助。提前致谢。
谁能帮我解决这个问题。