Re: psql \i command with a missing file name doesn't rollback the transaction
От | Bruce Momjian |
---|---|
Тема | Re: psql \i command with a missing file name doesn't rollback the transaction |
Дата | |
Msg-id | 20131002141513.GD21547@momjian.us обсуждение исходный текст |
Ответ на | psql \i command with a missing file name doesn't rollback the transaction (Alexey Klyukin <alexk@hintbits.com>) |
Список | pgsql-bugs |
On Fri, Sep 20, 2013 at 11:15:01AM +0200, Alexey Klyukin wrote: > Hi, > > We've discovered a surprising behavior of psql \i command. What we sometimes to > add new tables to the database is: > > begin; > \i /path/to/table/definitions/table1.sql > \i /path/to/table/definitions/table2.sql > ... > \i /path/to/table/definitions/tableN.sql > commit; > > What we discovered that some files in the /path/to/table/definitions were > missing (say, table 2,3), but the table 1, 4... N appeared in the database > after executing the transaction. This is quite a catch, since we cannot rely on > transaction consistency when using an include directive. > > The test is simple: > > begin; > \i whatever; > select 1; > commit; > > The expected behavior was that select 1 would lead to 'ERROR: current > transaction is aborted'. > The current behavior is that it is executed, although a message is emitted to a > client: > whatever: No such file or directory > > Would it be possible from the client side to generate the rollback to the > server on an attempt to include a non-existing file (perhaps only when > ON_ERROR_STOP is set to 1?). The problem is how would we decide what psql actions should trigger a rollback, and how would we show the user we did that. -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + It's impossible for everything to be true. +
В списке pgsql-bugs по дате отправления: