Re: PSQL commands: \quit_if, \quit_unless

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: PSQL commands: \quit_if, \quit_unless
Дата
Msg-id CAFj8pRDc7rOaVpDiVqvUFe0-OVc+9S6UY1EAAaAk2PKDMzmA=g@mail.gmail.com
обсуждение исходный текст
Ответ на Re: PSQL commands: \quit_if, \quit_unless  (Fabien COELHO <coelho@cri.ensmp.fr>)
Ответы Re: PSQL commands: \quit_if, \quit_unless  (Fabien COELHO <coelho@cri.ensmp.fr>)
Список pgsql-hackers


2016-12-03 8:16 GMT+01:00 Fabien COELHO <coelho@cri.ensmp.fr>:

Hello,

My guess is that something comparable to where pgbench is would be a
reasonable target --- not least because I think we should strive to
reduce unnecessary differences between psql and pgbench metalanguages.

I'm not sure that I'm ready to propose that they should share the same
expression engine, but perhaps it's not a totally wacky idea.

I'm trying to summarize a proposal for a conditional structure:

 - existing psql ":"-variables can be used, allowing anything from SQL
  (eg querying about available objects, features, extensions,
   current settings...)

 - target psql conditional syntax could be:

    \if <expression>
      ...
    \elif <...>
      ...
    \else
      ...
    \endif

 - possible incremental implemention steps on this path:

  (1) minimal condition and expression, compatible with
      a possible future full-blown expression syntax

     \if :variable
     \if not :variable -- maybe \if ! :variable
       ...
     \endif

  (2) add "\else"

  (3) add "\elif ..." (or maybe "\elsif ..."?)

  (4) add greater but limited expressions, compatible with a full blown
      expression syntax (eg \if :var/const <comparison-operator> :var/const)

  (5) add full-blown <expression> support for \if, which suggest that
      it would also be available for \set


Does this looks okay, or does it need to be amended?

A few comments:

Given the experience with pgbench and the psql context, I do not think that it would really need to go beyond step 2 above, but I agree that I may be wrong and it is best to be prepared for that from the start. Given the complexity and effort involved with (5), it seems wise to wait for a clearer motivation with actual use-cases before going that far.

In the benchmarking context, the point is to test performance for a client-server scenario, in which case the client has to do some things, thus needs miminal computation capabilities which were available early in pgbench (\setrandom, \set with one arithmetic operation...) because they were necessary. Probably \if ... would make sense in pgbench, so I'll think about it. 

In psql interactive context, conditions and expressions do not make sense as the user typing the command knows what they want, thus will do evaluations in their head to avoid typing stuff...

In psql scripting context, conditions are likely to be about what to do with the database, and what I understand of the use-case which started this discussion is that it is about versions, settings, available objects, typically "if this is already installed, skip this part" or "if version beyond YYY, cannot install because of missing features" when installing and initializing an application. For this purpose, ISTM that the query is necessarily performed server-side, thus the actual need for a full-blown client-side expression is limited or void, although as already said being prepared is a good thing.

Some possibilities from pgbench can have sense in psql too - generating some random numbers from a range.  In the end we use one parser for psql and for pgbench.

I agree, so step 2 should be enough, and I accept so there is opened door for any future enhancing.

We can implement some client side boolean functions (similar to pgbench functions that can cover often tasks: version_less, version_greather, user_exists, tables_exists, index_exists, variable_exists, schema_exists,

Regards

Pavel

--
Fabien.

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Noah Misch
Дата:
Сообщение: Re: Document how to set up TAP tests for Perl 5.8.8
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: [PATCH] Reload SSL certificates on SIGHUP