Как использовать ввод пользователя в качестве параметра для написания запроса на создание таблицы в PostgreSQL? - PullRequest
0 голосов
/ 27 мая 2020

Я думаю, это должен быть очень простой вопрос, но я не могу найти никакой информации в Интернете, поэтому я должен задать этот вопрос. Мне нужно запустить этот код на PostgreSQL

Мне нужно написать запрос , чтобы использовать вводимые пользователем данные в качестве параметра для создания таблицы.

Например, мы есть такая таблица рейтингов

  |userid | movieid  |  rating

1 |  1    | 122      |  5.0

2 |  1    | 185      |  4.5

3 |  1    | 199      |  3.3 

4 |  2    | 110      |  5.0

5 |  2    | 199      |  4.0 

6 |  2    | 231      |  4.0

Итак, если я хочу создать таблицу для отображения всех оценок пользователя 2, я могу использовать запрос ниже.

CREATE TABLE query0 AS
SELECT  ratings.userid, ratings.movieid,ratings.rating
FROM  ratings
WHERE ratings.userid = '2'

Мой вопрос: : Как мне получить таблицу по параметрам, позволить пользователю ввести идентификатор пользователя для создания таблицы

Я пробую что-то вроде этого, но определенно не работает

CREATE TABLE query0 AS
SELECT  ratings.userid, ratings.movieid,ratings.rating
FROM  ratings
WHERE ratings.userid = :userinput 

Мне нужно запустить код на PostgreSQL

1 Ответ

0 голосов
/ 27 мая 2020

Это можно легко сделать с помощью функции PL / PG SQL в PostgreSQL 9.5:

select * from ratings;
 userid | movieid | rating 
--------+---------+--------
      1 |     122 |    5.0
      1 |     185 |    4.5
      1 |     199 |    3.3
      2 |     110 |    5.0
      2 |     199 |    4.0
      2 |     231 |    4.0
(6 rows)

create function create_table(p_userid int) 
returns boolean
language plpgsql
as
$$
begin
 execute format('CREATE TABLE query0 AS
                 SELECT  ratings.userid, ratings.movieid,ratings.rating
                 FROM  ratings
                 WHERE ratings.userid = %s', p_userid);
 return true;
end;
$$;
CREATE FUNCTION

select create_table(2);
 create_table 
--------------
 t
(1 row)

select * from query0;
 userid | movieid | rating 
--------+---------+--------
      2 |     110 |    5.0
      2 |     199 |    4.0
      2 |     231 |    4.0
(3 rows)

Однако, если вам нужно создать много таблиц, имя таблицы не может быть жестко закодировано и должно быть либо параметром, либо строиться автоматически.

...