Re: IMPORT FOREIGN SCHEMA statement - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: IMPORT FOREIGN SCHEMA statement |
Date | |
Msg-id | 4662.1405002393@sss.pgh.pa.us Whole thread Raw |
In response to | Re: IMPORT FOREIGN SCHEMA statement (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: IMPORT FOREIGN SCHEMA statement
|
List | pgsql-hackers |
I wrote: > Michael Paquier <michael.paquier@gmail.com> writes: >> I guess that this implementation is enough as a first shot, particularly >> regarding the complexity that default expression import would bring up for >> postgres_fdw (point raised during the review, but not really discussed >> afterwards). > Yeah. I'm actually more concerned about the lack of collation import, > but that's unfixable unless we can figure out how to identify collations > in a platform-independent way. I had second thoughts about this: now that the code is generating a textual CREATE FOREIGN TABLE command, it would actually be just about trivial to pull back the text representation of the remote's default expression and attempt to apply it to the foreign table. Likewise we could ignore the platform-dependency issues in collations and just attempt to apply whatever collation name is reported by the remote. Arguably both of these things would be too risky to do by default, but if we make them be controlled by IMPORT options, why not? In the case of a default expression, AFAICS there are two possible failure modes. The local server might not have some function or operator used by the remote; in which case, you'd get a pretty easy to understand error message, and it would be obvious what to do if you wanted to fix it. Or we might have a similarly-named function or operator that behaves differently (an important special case is where the function is volatile and you'd get a different answer locally, eg nextval()). Well, that's a problem, and we'd need to document it, but I don't see that that risk is so bad that we should refuse to import any default expressions ever. Especially when common cases like "0" or "now()" can be expected to work fine. Similarly, in the case of a collation name, we might not have the same locale name, which would be annoying but not dangerous. Or we might have a similarly-named locale that actually has sorting rules different from the remote's. But that would only be a real risk when pulling from a remote that's on a different OS from the local server, and in any case whatever discrepancy might exist is unlikely to be worse than failing to import a collation spec at all. Not importing the remote's spec is *guaranteed* to be wrong. So I propose we invent a couple more import options, say import_default and import_collate, and make the postgres_fdw code do the obvious thing with them. import_default should probably default to false, but I'm about halfway tempted to say that import_collate should default to true --- if you're importing a collatable column and you don't have a matching locale locally, it seems like it'd be better if we complain about that by default. Comments? regards, tom lane
pgsql-hackers by date: