замена строки с копии

judas777
Дата: 20.12.2014 18:45:47
Здравствуйте уважаемые гуру
Подскажите метод, которым можно заменить строку значениями с другой таблицы.
Например
Есть таблица test и её идентичная копия backup_test
создать запись можно очень просто INSERT INTO backup_test SELECT * TEST where id=значение.

Вопрос: как заменить информацию в уже созданной строчке

п.с прочитал в документации вот это
Compatibility
This command conforms to the SQL standard, except that the FROM and RETURNING clauses are PostgreSQL extensions, as is the ability to use WITH with UPDATE.

According to the standard, the column-list syntax should allow a list of columns to be assigned from a single row-valued expression, such as a sub-select:
UPDATE accounts SET (contact_last_name, contact_first_name) =
(SELECT last_name, first_name FROM salesmen
WHERE salesmen.id = accounts.sales_id);

This is not currently implemented — the source must be a list of independent expressions.

Some other database systems offer a FROM option in which the target table is supposed to be listed again within FROM. That is not how PostgreSQL interprets FROM. Be careful when porting applications that use this extension.


но UPDATE SET (SELECT) не работает
judas777
Дата: 21.12.2014 09:45:58
- тема закрыта, решение нашёл-
(может способ и "топорный" но работоспособный)
-- восстановление значений полей строки с другой строки таблицы
CREATE OR REPLACE FUNCTION restore_current_row(tablename text, rowid integer, backid integer) 
  RETURNS void AS
$BODY$
  DECLARE _ROW record;
BEGIN
  FOR _ROW IN (SELECT column_name FROM information_schema.columns 
     WHERE table_name=$1 and table_schema='public' and column_name<>'id')
  LOOP
     EXECUTE 'UPDATE "'||tablename||'" SET '||_ROW.column_name||'='||
       '(SELECT '||_ROW.column_name||' FROM "'||tablename||'"' WHERE id='||backid||') WHERE id='||rowid;         
  END LOOP;
  
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
torbasow
Дата: 21.12.2014 12:00:05
judas777,

из! Из другой таблицы! Что же вы все пишете «с» вместо «из»? Тогда уж надо писать и «на таблице».
граммарантифа
Дата: 21.12.2014 12:41:22
torbasow
judas777,

из! Из другой таблицы! Что же вы все пишете «с» вместо «из»? Тогда уж надо писать и «на таблице».
та он с винницы
вот не надо было шпынять за местные диалекты и диалектизмы -- по сю пору на украиние (в окраинной провинции) жили бы ураинцы (окраинные провинциалы), а не упоротые свидомиты
по секрету скажу: кубаноиды -- те тоже на южных диалектах балакают, да курские тож. не на ляхотской мове, конечно, но и не на масковском базарном аль питерском "литературно"--писарском

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

в исходном посте чел не знает что такое апдейт-- вот что угнетает, а "с", "вна" и прочее оставьте ватникам в развлечение. многообразие -- это прекрасно . типа скажет кто -- "я скучаю за тобой" -- и сразу ясно -- с югов есть пошёл красава.

https://yandex.ru/yandsearch?clid=2186618&text="я скучаю за тобой"
judas777
Дата: 24.12.2014 18:22:30
автор
из! Из другой таблицы!

автор
по секрету скажу

по сути сказать что-то можете "интеллектуалы" ?
ты, этта
Дата: 25.12.2014 12:09:36
judas777
автор
из! Из другой таблицы!

автор
по секрету скажу

по сути сказать что-то можете "интеллектуалы" ?

по существу:
-- существо не знало слово UPDATE и должно бы обтекать
а ссуть ли, не ссуть ли -- не его, существа, дело
ты, этта
Дата: 25.12.2014 12:37:11
существо
<>
но UPDATE SET (SELECT) не работает

вот так работает, пользуюсь
UPDATE test
   SET (id, txt)= (t.id,t.txt )
FROM test t
WHERE t.id = test.id;

но да, через * не укажешь, печалька