Re: Bug in SQL/MED?

花田 茂 <hanada@metrosystems.co.jp>

From: 花田 茂 <hanada@metrosystems.co.jp>
To: Albe Laurenz <laurenz.albe@wien.gv.at>
Cc: pgsql-hackers@postgresql.org
Date: 2011-06-30T10:00:23Z
Lists: pgsql-hackers

Attachments

(2011/06/29 21:23), Albe Laurenz wrote:
> If you invoke any of the SQL/MED CREATE or ALTER commands,
> the validator function is only called if an option list was given.
> 
> That means that you cannot enforce required options at object creation
> time, because the validator function is not always called.
> I consider that unexpected an undesirable behaviour.
> 
> Example:
> CREATE EXTENSION file_fdw;
> CREATE FOREIGN DATA WRAPPER file HANDLER file_fdw_handler VALIDATOR
> file_fdw_validator;
> CREATE SERVER file FOREIGN DATA WRAPPER file;
> CREATE FOREIGN TABLE flat (id integer) SERVER file OPTIONS (format
> 'csv');
> SELECT * FROM flat;
> ERROR:  filename is required for file_fdw foreign tables
> 
> Now file_fdw does not try to enforce the "filename" option, but it
> would be nice to be able to do so.
> 
> The attached patch would change the behaviour so that the validator
> function
> is always called.
> 
> 
> If that change meets with approval, should file_fdw be changed so that
> it
> requires "filename" at table creation time?

I think this proposal is reasonable.  IMHO this fix is enough trivial to
be merged into 9.1 release.

I attached a patch which fixes file_fdw to check required option
(filename) in its validator function.  I think that such requirement
should be checked again in PlanForeignScan(), as it had been so far.
Note that this patch requires fdw.patch has been applied.

With this patch, file_fdw rejects commands which eliminate filename
option as result.  Please see attached sample.txt for detail.

BTW, I noticed that current document says just "the validator function
is called for CREATE FDW/SERVER/FOREIGN TABLE", and doesn't mention
ALTER command or USER MAPPING.  I'll post another patch for this issue
later.

Regards,
-- 
Shigeru Hanada