Я думаю, что вы могли бы улучшить дизайн, сохраняя эти идентификаторы в другой таблице по одному идентификатору на строку со ссылкой на внешний ключ table_name.primary_key
.
Также хранение данных Array в виде текстовых строк кажется странным.
В любом случае, вот один из способов сделать это: я обернул набор, возвращенный UNNEST
, внутренним подвыбором, чтобы иметь возможность применить функцию aggregate_function, необходимую для повторного объединения строк.
UPDATE table_name
SET ids = new_ids
FROM LATERAL (
SELECT primary_key, array_agg(elem)::text AS new_ids
FROM (SELECT DISTINCT primary_key, UNNEST(ids::text[]) as elem
FROM table_name ) t_inner
GROUP by primary_key )t_sub
WHERE t_sub.primary_key = table_name.primary_key
My recommendation is to start out in the middle. Start with C++03, but check the features and C++0x libs that some compilers are already offering each so often. As of now, C++03 is THE standard (not only formally, but most code you will find will be strictly C++03).
Now, if you intend on learning go for the best: start quickly with STL basics and jump into Boost libraries right away. Learn templates the whole way, read on metaprogramming. Modern C++03 usage will get you right on track for C++0x.
Изучите старый стандарт C ++ 03. C ++ 0X все еще находится в паре лет (по крайней мере) от даже ратификации в качестве стандарта. После стандартизации потребуется время, прежде чем появятся какие-либо соответствующие реализации, поддерживающие все его функции, и потребуется еще больше времени, прежде чем реализации C ++ 0X станут значительно популярны и часто используются.
На мой взгляд, изучение C ++ 03 более практично. Если вы не против изучения новых функций, но можете использовать частичное в течение нескольких лет, лучше подойдет C ++ 0x. Хорошая новость - новая версия g ++ и vc ++ 2010 уже реализовали части новых функций c ++ 0x.
Изучение новых возможностей C ++ 0x - это отличный способ узнать больше о C ++ 03 в деталях, потому что вы видите, как работает C ++ 03, проблемы с ним и что предлагает C ++ 0x для решения этих проблем.
Я недавно узнал об этом опыте. о новых ссылках rvalue и семантике перемещения. В C ++ 03 существует много ненужного временного создания и копирования в выражениях, поэтому изучение того, почему в C ++ 03 возникает эта проблема и как C ++ 0x решает эту проблему, было довольно поучительным и информировало меня в текущих разработках C ++.
Пройдет несколько лет, прежде чем компиляторы C ++ 0x станут обычным явлением. Так что на данный момент у вас нет особого выбора. Изучите C ++ 03, и тогда вы сможете изучать новые вещи отдельно, когда придет время. Принципиальные различия не так уж велики. 0x в основном связан с добавлением новых функций и обобщением и упрощением существующих функций. Знание C ++ 03 по-прежнему применимо.