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

АКТУАЛИЗИРАНЕ на цял ред в PL/pgSQL

Така е.
Можете да актуализирате колони от тип ред или запис в plpgsql - точно както го имате. Очевидно трябва да работи?

Това би актуализирало основната таблица, разбира се, не променливата!

UPDATE my_table SET date=now() WHERE id='1';

Тук бъркате две неща...

Отговор на пояснение в коментар

Не мисля, че има синтаксис в PostgreSQL, който може да UPDATE цял ред. Можете да UPDATE списък с колони , обаче. Помислете за тази демонстрация:

Обърнете внимание как използвам thedate вместо date като име на колона, date е запазена дума във всеки SQL стандарт и име на тип в PostgreSQL.

CREATE TEMP TABLE my_table (id serial, thedate date);
INSERT INTO my_table(thedate) VALUES (now());

CREATE OR REPLACE FUNCTION test_up()
  RETURNS void LANGUAGE plpgsql AS
$func$
DECLARE
    _r my_table;
BEGIN
   SELECT * INTO _r FROM my_table WHERE id = 1;
   _r.thedate := now()::date + 5 ;

   UPDATE my_table t
    -- explicit list of columns to be to updated
   SET   (id, thedate) = (_r.id, _r.thedate)
   WHERE  t.id = 1;
END
$func$;

SELECT test_up();
SELECT * FROM my_table;

Можете обаче да INSERT цял ред лесно. Просто не предоставяйте списък с колони за таблицата (което обикновено трябва, но в този случай е напълно добре да не го правите).

Като UPDATE е вътрешно DELETE последвано от INSERT както и да е, и функция автоматично капсулира всичко в транзакция, не виждам защо не можете да използвате това вместо това:

CREATE OR REPLACE FUNCTION x.test_ delins()
  RETURNS void LANGUAGE plpgsql AS
$func$
DECLARE
    _r my_table;
BEGIN
   SELECT * INTO _r
   FROM my_table WHERE id = 1;
   _r.thedate := now()::date + 10;

   DELETE FROM my_table t WHERE t.id = 1;
   INSERT INTO my_table SELECT _r.*;
END
$func$;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да регистрирам SQL изрази във Vapor 3/Fluent?

  2. PostgreSQL:изпълнение на select null срещу false

  3. Пулиране на връзки с Pgbouncer на PostgreSQL 9.0

  4. В PostgreSQL какво означава хеширан подплан?

  5. Как да запазя данни с помощта на postgres docker изображение?