On Jul 20, 2010, at 9:05 AM, Robert Haas wrote:

> On Tue, Jul 20, 2010 at 10:00 AM, David Christensen <da...@endpoint.com> 
> wrote:
>> Sorry for the delays in response.  This is fine; I think there are some 
>> semantic questions that should still be resolved at this point, particularly 
>> if we're moving toward supporting multiple -c and -f lines as expressed (an 
>> idea that I agree would be useful).  Specifically:
>> 
>> 1) Does the -1 flag with multiple files indicate a single transaction for 
>> all commands/files or that each command/file is run in its own transaction?  
>> I'd implemented this with the intent that all files were run in a single 
>> transaction, but it's at least a bit ambiguous, and should probably be 
>> documented at the very least.
> 
> I think your implementation is right.  Documentation is always good.
> 
>> 2) I had a question (expressed in the comments) about how the final error 
>> handling status should be reported/handled.  I can see this affecting a 
>> number of things, particularly ON_ERROR_{STOP,ROLLBACK} behavior; 
>> specifically, if there was an error, it sounds like it should just abort 
>> processing of any other queued files/commands at this point (in the case of 
>> ON_ERROR_STOP, at least).
> 
> Right.  I think it should behave much as if you concatenated the files
> and then ran psql on the result.  Except with better reporting of
> error locations, etc.
> 
>> 3) With the switch to multiple intermixed -c and -f flags, the internal 
>> representation will essentially have to change to a queue of structs; I 
>> think in that case, we'd want to modify the current .psqlrc handling to push 
>> a struct representing the .psqlrc file at the front of the queue, depending 
>> on the code paths that currently set this up.  Are there any gotchas to this 
>> approach?  (I'm looking essentially for odd code paths where say .psqlrc was 
>> not loaded before, but now would be given the proper input of -c, -f file, 
>> -f -.)
>> 
>> I'll look more in-depth at the posted feedback and Mark's proposed patch.
> 
> Well, IIRC, one of -c and -f suppresses psqlrc, and the other does
> not.  This doesn't seem very consistent to me, but I'm not sure
> there's much to be done about it at this point.  I guess if you use
> whichever one suppresses psqlrc even once, it's suppressed, and
> otherwise it's not.  :-(


That seems sub-optimal; I can see people wanting to use this feature to do 
something like:

psql -c 'set work_mem = blah' -f script.sql

and then being surprised when it works differently than just `psql -f 
script.sql`.

psql -c "select 'starting'" -f file1.sql -c "select 'midway'" -f file2.sql -c 
"select 'done!'"

Although I wonder if the general usecase for .psqlrc is just in interactive 
mode; i.e., hypothetically if you're running scripts that are sensitive to 
environment, you're running with -X anyway; so maybe that's not that big of a 
deal, as it's kind of an implied -X with multiple -c or -f commands.  And if 
you really wanted it, we could add a flag to explicitly include .psqlrc (or the 
user could just specify -f path/to/psqlrc).

Regards,

David
--
David Christensen
End Point Corporation
da...@endpoint.com





-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to