2013-06-19 2 views
0

Что я в основном делаю в эти дни, это преобразование базы данных Oracle SQL в базу данных PostgreSQL (9.1.6).Перенос Oracle SQL на PostgreSQL - MERGE INTO

Наиболее распространенные вопросы, которые я, как правило, попадаются следующие:

1. decode --> case when 
2. nvl --> coalesce 
3. (+) --> outer join 
4. connect by prior --> connectby function with tablefunc contrib module. 
5. merge into --> ??? 
etc... 

В настоящее время я скользя через руководство PostgreSQL и достаточно странно, кажется, нет MERGE INTO заявление (или любые прямые замены для него).

Я знаю, что PL/pgSQL можно использовать в качестве альтернативы, но это будет означать большую нагрузку для меня. Есть что-то, что мне не хватает?

+0

Не существует простой замены слияния. По причинам и возможным решениям проверьте это [blogpost] (http://www.depesz.com/2012/06/10/why-is-upsert-so-complicated/). –

+0

4) 'connect by' -> рекурсивное общее выражение таблицы: http://www.postgresql.org/docs/current/static/queries-with.html –

+0

Возможный дубликат [Insert, on duplicate update (postgresql)] (http://stackoverflow.com/questions/1109061/insert-on-duplicate-update-postgresql) –

ответ

1

Нет простой замены и, конечно, не для 9.1.

Лучшим вариантом является обновление до 9.2 и просмотр записываемых CTE. Это позволяет выполнять многоступенчатые операции записи аналогичным образом. Например, вы можете:

WITH up (UPDATE foo set bar = 'baz' where id > 1000 
     returning id) 
INSERT INTO foo(id, bar) 
SELECT s, 'baz' 
    FROM generate_sequence(1001, 10000) s 
WHERE s NOT IN (select id from up); 
Смежные вопросы