java 如何通过在函数中传递字符串数组来过滤PostgreSQL表

qjp7pelc  于 2023-01-29  发布在  Java
关注(0)|答案(3)|浏览(92)

我想传递一个像[group1, group2, group3]这样的数组,然后过滤Postgres表列groups
创建或替换函数funname(groups text[])选择 * 从表名其中组列@〉组
另外,请编写相同的函数,在定义character varying []时出现错误。

tjvv9vkg

tjvv9vkg1#

我不清楚您想要什么,但也许您正在寻找ANY运算符?

select * 
from some_unknown_table
where group_column = any(array_parameter);

这要求group_column的数据类型与其中一个参数匹配。例如,如果group_columntextvarchar,则需要将参数声明为text[]。如果group_columninteger,则需要将参数声明为integer[]

cngwdvgl

cngwdvgl2#

您可以使用unnest函数转换'table'输出中的数组,然后筛选所需的值,例如:

SELECT * FROM (
SELECT unnest (ARRAY['group1','group2','group3']) AS arr
) AS sub WHERE arr ='group3'
ggazkfy8

ggazkfy83#

您可以对组数组使用join,对筛选器使用SELECT WHERE group IN groups:

import psycopg2

def filter_groups(group_names):

try:
    # connect to BD
    connection = psycopg2.connect(
        host="host",
        user="user",
        password="pass",
        database="db_name"
    )
except Exception as _ex:
    print("[INFO] Connection error", _ex)
try:
    with connection.cursor() as cursor:
        placeholders = ','.join(['%s'] * len(group_names))
        rsql = f"SELECT * FROM table_name WHERE groups IN ({placeholders})"
        cursor.execute(rsql, group_names)
        rows = cursor.fetchall()
        cursor.close()
except Exception as _ex:
    print("[INFO] Error while working with PostgreSQL", _ex)

if connection:
    connection.close()
    print("[INFO] PostgreSQL connection closed.")
return rows

相关问题