据Vertica 8.1.x docs所知,Vertica 8.1.x及更高版本均支持LISTAGG。但是,当我尝试使用此功能时,会看到以下内容:
SQL错误[3457] [42883]:[Vertica] VJDBC错误:函数 LISTAGG(varchar)不存在,或者对的权限被拒绝 LISTAGG(varchar)
执行时:
SELECT LISTAGG(myColumn) FROM myTable;
我在另一个Stack Overflow帖子中看到LISTAGG是在v9.1 (see here)中引入的。我目前正在使用v9.0.1-19版
任何人都可以确认或提供有关LISTAGG为何无法正常工作的信息吗?
答案 0 :(得分:1)
我可以确认它是在v9.1.1-4版本中添加的。在v9.1.4 new features page
中查看我有2个Vertica数据库,第一个是v9.0.1-5,第二个是v9.2.0-7。 LISTAGG()
在第二个可用,但在第一个不可用:
dbadmin=> select version();
version
------------------------------------
Vertica Analytic Database v9.0.1-5
dbadmin=> SELECT LISTAGG(myColumn) FROM myTable;
ERROR 3457: Function LISTAGG(varchar) does not exist, or permission is denied for LISTAGG(varchar)
HINT: No function matches the given name and argument types. You may need to add explicit type casts
version
------------------------------------
Vertica Analytic Database v9.2.0-7
dbadmin=> SELECT LISTAGG(myColumn) FROM myTable;
LISTAGG
---------
aaa,abc
LISTAGG()
是/opt/vertica/packages/VFunctions
软件包的一部分,它是v9.1.1及更高版本中v_func
模式中的唯一功能。
一个不错的选择是GROUP_CONCAT()
,它是string_packages UDx的一部分。有关安装说明和用法,请参见自述文件。