(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