PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да предам запис на PL/pgSQL функция?

Има различни опции в зависимост от цялостната картина.
По принцип вашата функция за вмъкване може да работи по следния начин:

CREATE FUNCTION insert_thing (_thing flavored_view)
   RETURNS int AS
$func$
   INSERT INTO things (name) VALUES ($1.name) -- plus 30 more columns
   RETURNING id;
$func$ LANGUAGE sql;

Използване на типа ред на изгледа , защото NEW във вашия тригер е от този тип.
Използвайте проста SQL функция, която може да бъде вградена и може да работи по-добре.

Демо разговор:

SELECT insert_thing('(1, foo, 1, bar)');

Във вашия тригер flavored_trig () :

inserted_id := insert_thing(NEW);

Или, основно пренаписано:

IF TG_OP = 'INSERT' THEN
   INSERT INTO flavored_things(thing_id, flavor)
   VALUES (insert_thing(NEW), NEW.flavor);
   RETURN NEW;
ELSIF ...

record не е валиден тип извън PL/pgSQL, това е просто общ заместител за все още неизвестен тип ред в PL/pgSQL), така че не можете да го използвате за входен параметър в декларация на функция.

За по-динамична функция, приемаща различни типове редове можете да използвате полиморфен типа . Примери:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Индекс с няколко колони на 3 полета с хетерогенни типове данни

  2. Postgres Няма разрешение за създаване на потребител

  3. PostgreSQL към Data-Warehouse:Най-добрият подход за ETL в почти реално време / извличане на данни

  4. Преглед на новите съхранени процедури в PostgreSQL 11

  5. Прекратяване на NGINX TLS за PostgreSQL