Как создать шаблон запроса в Postgres? - PullRequest
1 голос
/ 16 июня 2020

У меня есть запрос:

SELECT * FROM users WHERE firstname = 'joe'

Я хотел бы создать функцию для использования этого в качестве шаблона. Я нашел несколько документов по функциям, и они кажутся чрезвычайно тупыми для чего-то такого простого. (https://www.postgresql.org/docs/9.1/sql-createfunction.html)

То, что я ищу, должно выглядеть примерно так:

CREATE FUNCTION getUserByFirstName(text) AS TEMPLATE (
  SELECT * FROM users WHERE firstname = $1
)

Как создать шаблоны запросов в postgres?


PS Я знаю, что на это нужно отвечать повсюду, но я попытался найти ~ 12 различных комбинаций слов «шаблон» «запрос» «функция» и «postgres "безрезультатно.

WITH аналогично, но не определяется глобально и не используется повторно (https://www.postgresql.org/docs/9.2/queries-with.html)

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Я получил этот ответ от xzilla на Postgres канале Slack

CREATE OR REPLACE FUNCTION getUserByFirstName(text) RETURNS SETOF users AS $$ 
  SELECT * FROM users WHERE firstname = $1
$$ LANGUAGE SQL;

Он очень похож на принятый ответ.

1 голос
/ 16 июня 2020

Ответ зависит от того, что вы подразумеваете под «шаблоном»:

Если вы хотите быть c универсальным в отношении параметра, вы уже сделали (за исключением некоторых настроек синтаксиса): просто опустите TEMPLATE и вместо этого произнесите RETURNS users.

Если вы хотите быть универсальным c по отношению к столбцу (firstname), вы можете сделать это с помощью Dynami c SQL.

Если вы хотите быть generi c по отношению к таблице, вам не повезло: у вас не может быть разумного типа возврата Dynami c в PostgreSQL.

Это ваша функция, написанная синтаксически правильно:

CREATE FUNCTION getUserByFirstName(text) RETURNS users
   LANGUAGE sql AS
'SELECT * FROM users WHERE firstname = $1';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...