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

Динамично добавяне на колона с множество стойности към всяка таблица с помощта на PL/pgSQL функция

Направих това с refcursor ако искате изходен списък с колони напълно динамичен:

CREATE OR REPLACE FUNCTION is_record_exists(tablename character varying, columns character varying[], keepcolumns character varying[] DEFAULT NULL::character varying[])
    RETURNS SETOF refcursor AS
$BODY$

DECLARE 
    ref refcursor;
    keepColumnsList text;
    columnsList text; 
    valuesList text;
    existQuery text;
    keepQuery text;
BEGIN
    IF keepcolumns IS NOT NULL AND array_length(keepColumns, 1) > 0 THEN
        keepColumnsList :=  array_to_string(keepColumns, ', ');
    ELSE
        keepColumnsList :=  'COUNT(*)';
    END IF;

    columnsList := (SELECT array_to_string(array_agg(name || ' = ' || value), ' OR ') FROM
        (SELECT unnest(columns[1:1]) AS name, unnest(columns[2:2]) AS value) pair);

    existQuery := 'SELECT ' || keepColumnsList || ' FROM ' || tableName || ' WHERE ' || columnsList;
    RAISE NOTICE 'Exist query: %', existQuery;

    OPEN ref FOR EXECUTE
        existQuery;
    RETURN next ref;
END;$BODY$
  LANGUAGE plpgsql;

След това трябва да извикате FETCH ALL IN за да получите резултати. Подробен синтаксис тук или там:https://stackoverflow.com/a/12483222/630169 . Изглежда това е единственият начин за сега. Надяваме се, че нещо ще бъде променено в PostgreSQL 11 с ПРОЦЕДУРИ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostGIS в действие

  2. Условно update_or_create с django

  3. Вмъкнете в postgres SQL

  4. намиране на подобни книги въз основа на закупени книги въз основа на мета ключови думи за книги

  5. По време на локално разработване с Kubernetes/minikube, как трябва да се свържа с базата данни на postgres, работеща на localhost?