From: | Denis Gantsev <gantsevdenis(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Feature proposal for psql |
Date: | 2020-09-19 18:58:59 |
Message-ID: | CAPsvASv2ZRq4ZTZQAvwzAh4CnfK=6+0H-iFRaopCo-NA3aFoWA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-novice |
On Sat, 19 Sep 2020 at 19:20, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Denis Gantsev <gantsevdenis(at)gmail(dot)com> writes:
> > I have a working proposal for a small feature, which I would describe in
> > one sentence as
> > "named parametrized queries".
>
> I can see the use of being able to insert parameters into a "macro",
> and you're right that the existing variable-interpolation feature
> can't handle that.
>
> > Basically it allows to save something like this in a file:
>
> > --psql:MyQuery1
> > SELECT 42 FROM @0
> > WHERE true
> > --psql:end
>
... however, that syntax seems pretty horrid. It's unlike
> anything else in PG and it risks breaking scripts that work today.
I actually thought that would be a completely different file from .psqlrc:
hence, no risk of breaking existing scripts.
That particular file would for exemple be pointed by "PGNQFILE" (or
whatever) environment variable.
We don't do "comments that aren't really comments". "@0" as a
> parameter notation is a non-starter as well, because "@" is a
> perfectly legal prefix operator. Besides that, most stuff in
> Postgres is numbered from 1 not 0.
>
indeed, I missed the fact that "@" is an already used operator. I started
with "%s" (like psycopg2), but that would obviously collide too
If I were trying to build this, I'd probably look for ways to
> extend psql's existing variable-interpolation feature rather than
> build something entirely separate. It's not too hard to imagine
> writing a saved query like
>
> \set MyQuery1 'SELECT * FROM :param1 WHERE id = :param2'
>
> and then we need some notation for expanding a variable with
> parameters. With one eye on the existing notations :"foo" and
> :'foo', I'm wondering about something like
>
> :(MyQuery1,table_name,id_value)
>
> which is not very pretty, but it's not commandeering any syntax
> that's likely to be in use in current applications.
>
> BTW, the reason I'm suggesting variable notation for the parameter
> references is that the way you'd really want to write the saved
> query is probably more like
>
> \set MyQuery1 'SELECT * FROM :"param1" WHERE id = :''param2'''
>
> so as to have robust quoting behavior.
>
> One limitation of this approach is that \set can't span lines, so
> writing complex queries would be kinda painful. But that would
> be a good limitation to address separately; \set isn't the only
> metacommand where can't-span-lines is a problem sometimes.
> If you seriously want to pursue adding a feature like this,
> probably the -hackers list is a more appropriate discussion
> forum than -novice.
>
> regards, tom lane
>
The ability to save and retrieve multi-line queries would be quite nice
though, often I would like to save a query too large to type.
I think I don't know psql well enough to propose a viable syntax, so I
guess that would be up to experts here...
But I would be pretty happy to implement it.
Regards
Denis
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2020-09-19 19:20:57 | Re: factorial function/phase out postfix operators? |
Previous Message | Justin Pryzby | 2020-09-19 17:58:04 | Re: doc review for v13 |
From | Date | Subject | |
---|---|---|---|
Next Message | Corey Huinker | 2020-09-19 23:25:37 | Re: Feature proposal for psql |
Previous Message | Tom Lane | 2020-09-19 17:20:34 | Re: Feature proposal for psql |