如何选择从postgres中的函数参数创建的表名

时间:2019-06-03 05:21:16

标签: postgresql

我通过获取参数作为表的名称在函数中创建了表,这是我必须选择并更新同一表的函数的延续

CREATE OR REPLACE FUNCTION mnth
(
    tablename text
    folder_path text
)
RETURNS void as $$
BEGIN
    EXECUTE format ( 
        'CREATE TABLE %I.%I
        (
         row_id text,
         left_row text,
         right_row text,
         left_plus text
        )' , 'monthly',tablename 
    );

    INSERT INTO edmonton.rid_pid
    SELECT 
        row_id,
        SPLIT_PART (row_id, '-',1) as left_may,
        SPLIT_PART (row_id, '-',2) as right_may
    FROM  '%I.%I','monthly',tablename ;

    UPDATE '%I.%I','monthly',tablename
        SET left_plus = left_row:: integer +1 ;
END;
$$ LANGUAGE plpgsql;

我想知道如何获取用于选择和更新查询的函数参数

1 个答案:

答案 0 :(得分:0)

也许在这里您需要一个过程而不是一个函数(如果您的函数中不需要任何东西,则看起来更好)。 (https://www.postgresql.org/docs/11/sql-createprocedure.html)(仅适用于Postgresql 11)

如果您想了解格式功能: http://www.postgresqltutorial.com/postgresql-format/

也许这段代码正是您所需要的(或者足够接近)

CREATE OR REPLACE PROCEDURE mnth
(
    tablename text
)  LANGUAGE plpgsql as $$
declare query varchar;
BEGIN
    EXECUTE format ( 
        'CREATE TABLE IF NOT EXISTS %s.%s
        (
         row_id text,
         left_row text,
         right_row text,
         left_plus text
        )', 'monthly',cast(tablename as varchar)
    );

    query := 'INSERT INTO edmonton.rid_pid
    SELECT 
        row_id,
        cast(SPLIT_PART(row_id, ''-'',1) as varchar) as left_may,
        cast(SPLIT_PART (row_id, ''-'',2) as varchar) as right_may
    FROM  monthly.test;';
    execute query;
    query := 'UPDATE monthly.'||tablename||'
        SET left_plus = left_row::integer +1;';
    execute query;
END;
$$;

-- to call it
call mnth(cast('test' as text));

希望这会有所帮助。