Re: Table as argument in postgres function - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: Table as argument in postgres function
Date
Msg-id CAFj8pRAbDsUZxk_wQd9o1HKoZN3gM_rCEEYh9ZOBkYQFBX=kow@mail.gmail.com
Whole thread Raw
In response to Re: Table as argument in postgres function  (Corey Huinker <corey.huinker@gmail.com>)
Responses Re: Table as argument in postgres function  (Corey Huinker <corey.huinker@gmail.com>)
List pgsql-hackers


po 20. 5. 2019 v 7:56 odesílatel Corey Huinker <corey.huinker@gmail.com> napsal:

You can pass table name as text or table object id as regclass type.

inside procedure you should to use dynamic sql - execute statement. Generally you cannot to use a variable as table or column name ever.

Dynamic SQL is other mechanism - attention on SQL injection.

On this note, Snowflake has the ability to to parameterize object names (see: https://docs.snowflake.net/manuals/sql-reference/identifier-literal.html )

So you can do things like
    SELECT col_a, col_b FROM identifier('a_table_name')
or as a bind variable
    SELECT col_a, col_b FROM identifier($1)

Which is their way of avoiding SQL injection attacks in some circumstances. Their implementation of it is a bit uneven, but it has proven useful for my work.

I can see where this obviously would prevent the planning of a prepared statement when a table name is a parameter, but the request comes up often enough, and the benefits to avoiding SQL injection attacks are significant enough that maybe we should try to enable it for one-off. I don't necessarily think we need an identifier(string) function, a 'schema.table'::regclass would be more our style.

Is there anything preventing us from having the planner resolve object names from strings?

The basic problem is fact so when you use PREPARE, EXECUTE protocol, you has not parameters in planning time. 

Regards

Pavel

pgsql-hackers by date:

Previous
From: Corey Huinker
Date:
Subject: Re: Table as argument in postgres function
Next
From: Kyotaro HORIGUCHI
Date:
Subject: Re: [HACKERS] WAL logging problem in 9.4.3?