pgAdmin参数格式不能混用

Ste*_*Luo 5 postgresql pgadmin

背景

  • Ubuntu 18.04
  • Docker中的Postgresql 11.2
  • pgAdmin4 3.5

有一列名为alias的类型character varying[](64)。在使用之前,已经在某些行上设置了值psycopg2。那时一切都很好。

SQL = 'UPDATE public."mytable" SET alias=%s WHERE id=%s'
query = cursor.mogrify(SQL, ([values] , id))
cursor.execute(query)
conn.commit()
Run Code Online (Sandbox Code Playgroud)

最近,当我想使用pgAdmin GUI来增加更多值时,如第一个图所示,第二个图出现了错误,它说参数格式不能混合

在此处输入图片说明

在此处输入图片说明

好吧,事实证明,如果在pgAdmin中使用诸如psql查询工具之类的脚本插入值,则不会发生错误,即仅在使用pgAdmin的GUI时才会发生错误。

示例脚本:

UPDATE public."mytable" SET alias='{a, b}' WHERE id='myid'
Run Code Online (Sandbox Code Playgroud)

但是由于GUI修改值要容易得多,所以真的想弄清楚它。任何的想法?

Nic*_*nes 9

这是 pgAdmin 4.17 中的一个错误。

看起来每当您编辑表格中的achar(n)[]varchar(n)[]单元格时都会发生这种情况(尽管char[]并且varchar[]不受影响)。

它应该在 4.18 中修复

同时,您可以自己修复它,不会有太多麻烦。pgAdmin4 后端是用 Python 编写的,所以不需要重建任何东西;你可以潜入并改变来源。

找到安装 pgAdmin4 的目录,并web/pgadmin/tools/sqleditor/__init__.py在编辑器中打开。找到这一行:

typname = '%s(%s)[]'.format(
Run Code Online (Sandbox Code Playgroud)

...并将其更改为:

typname = '{}({})[]'.format(
Run Code Online (Sandbox Code Playgroud)

您需要重新启动 pgAdmin4 服务才能使更改生效。


buz*_*uzz 0

我无法使用字符变化数据类型来实现此功能,但一旦我将列数据类型转换为文本,它就可以工作。