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

Тригер за актуализиране на PostgreSQL

Както @SpartanElite посочи , вие задействате безкраен цикъл.

Опростете функцията за задействане:

CREATE OR REPLACE FUNCTION set_angle()
  RETURNS TRIGGER AS
$func$
BEGIN
   NEW."rotationAngle" := degrees(
                             ST_Azimuth(
                                ST_StartPoint(NEW.the_geom)
                              , ST_EndPoint(NEW.the_geom)
                             )
                          ) - 90;
   RETURN NEW;
END
$func$ LANGUAGE plpgsql;
  • Присвояване на NEW директно. Няма WHERE в този случай.
  • Вие трябва двойни кавички незаконни имена на колони. По-добре да не използвате такива имена като начало.
    Скорошни свързан отговор.
  • Кодът за вмъкване и надграждане е същият. Сгънах в един кодов път.

Използвайте BEFORE спусък. По този начин можете да редактирате колони на задействащия ред директно преди те се записват:

CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();

Въпреки това

Ако просто се опитвате да запазите функционално зависима стойност в таблицата (и няма други съображения):Не . Вместо това използвайте изглед или генерирана колона:

Тогава нямате нужда от нищо от това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталиране на PostgreSQL в Ubuntu за Ruby on Rails

  2. psycopg2 изтичаща памет след голяма заявка

  3. Създайте динамична заявка за актуализиране в psycopg2

  4. pqxx повторно използване/активиране на работна транзакция

  5. Филтриране на дублирани последващи записи в SELECT