Amazon redshift Amazon红移创建函数错误:42601:语法错误在或接近;“违约”;

Amazon redshift Amazon红移创建函数错误:42601:语法错误在或接近;“违约”;,amazon-redshift,plpgsql,stored-functions,Amazon Redshift,Plpgsql,Stored Functions,我试图通过Aginity(v4.9.1.2686)在红移中创建一个函数,但出现以下错误: 错误:42601:语法错误位于或接近“默认值” 功能代码: CREATE OR REPLACE FUNCTION search_columns ( searchfield text, searchtables name[] default '{}', searchschema name[] default '{}') RETURNS table(schemaname text, ta

我试图通过Aginity(v4.9.1.2686)在红移中创建一个函数,但出现以下错误:

错误:42601:语法错误位于或接近“默认值”

功能代码:

CREATE OR REPLACE FUNCTION search_columns (
    searchfield text,
    searchtables name[] default '{}',
    searchschema name[] default '{}')
RETURNS table(schemaname text, tablename text, columnname text, rowctid text)
AS $$
begin
    FOR schemaname, tablename, columnname IN
        SELECT c.table_schema, c.table_name, c.column_name
        FROM information_schema.columns c
        JOIN information_schema.tables t ON (t.table_name = c.table_name AND t.table_schema = c.table_schema)
        WHERE (c.table_name=ANY(searchtables) OR searchtables='{}')
        AND (c.table_schema=ANY(searchschema) OR searchschema='{}')
        AND t.table_type='BASE TABLE'
    LOOP
        EXECUTE format('SELECT ctid FROM %I.%I WHERE cast(%I as text)=%L', schemaname, tablename, columnname, searchfield)
        INTO rowctid;
    IF rowctid IS NOT NULL 
        THEN RETURN NEXT;
    END IF;
    END LOOP;
END;
$$ language plpgsql;
编辑

已尝试删除默认值,但出现不同错误:

错误:42601:在“表”处或附近出现语法错误


Redshift也不支持返回集合的函数:

Redshift不支持参数的默认值:@a\u horse\u和\u no\u name有什么办法可以解决这个问题吗?@a\u horse\u和\u no\u name或者我可以删除默认值吗?或者使用其他方法?红移也不支持返回集合的函数:@a_horse_,没有名称。在红移中是否有这样的函数可以运行?
CREATE OR REPLACE FUNCTION search_columns (
    searchfield text,
    searchtables name[] ,
    searchschema name[] )
RETURNS table(schemaname text, tablename text, columnname text, rowctid text)
AS $$
begin
    FOR schemaname, tablename, columnname IN
        SELECT c.table_schema, c.table_name, c.column_name
        FROM information_schema.columns c
        JOIN information_schema.tables t ON (t.table_name = c.table_name AND t.table_schema = c.table_schema)
        WHERE (c.table_name=ANY(searchtables) OR searchtables='{}')
        AND (c.table_schema=ANY(searchschema) OR searchschema='{}')
        AND t.table_type = 'BASE TABLE'
    LOOP
        EXECUTE format('SELECT ctid FROM %I.%I WHERE cast(%I as text)=%L', schemaname, tablename, columnname, searchfield)
        INTO rowctid;
    IF rowctid IS NOT NULL 
        THEN RETURN NEXT;
    END IF;
    END LOOP;
END;
$$ language plpgsql;