RE: [ oracle texte] migration oracle vers postgresql

From: CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)csgroup(dot)eu>
To: "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org>
Subject: RE: [ oracle texte] migration oracle vers postgresql
Date: 2022-01-27 13:31:46
Message-ID: MR2P264MB054875B6D5A01B61C776B455F1219@MR2P264MB0548.FRAP264.PROD.OUTLOOK.COM
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Volia je que ca donne comme migration coté oracle et cote postgres voir ci dessous

cote oracle
set serveroutput on size 1000000
set verify on
set echo on;
set feedback on;
set heading on;
drop table base_table;
drop table another_table1;
drop table another_table2;
drop index CRUMETEST.YOUR_INDEX;
exec ctx_ddl.drop_preference('single_ds');
create table base_table (id number, column1 varchar2 (20), column2 varchar2 (20), column3_id varchar2 (20), alltext varchar2 ( 1));
create table another_table1 (id number, column1 varchar2 (20));
create table another_table2 (id number, column1 varchar2 (20), column2 varchar2 (20));

insert into base_table values (1, 'btcol1 row1 TEST1', 'btcol2 row1', 'btcol3 row1', null);
insert into base_table values (2, 'btcol1 row2', 'btcol2 row2', 'btcol3 row2', null);
insert into base_table values (3, 'btcol1 row3', 'btcol2 row3', 'btcol3 row3', null);
insert into base_table values (4, 'btcol1 row4', 'btcol2 row4', 'btcol3 row4', null);

insert into another_table1 values (1, 'at1col1 row1');
insert into another_table1 values (2, 'at1col1 row2 TEST2');
insert into another_table1 values (3, 'at1col1 row3');
insert into another_table1 values (4, 'at1col1 row4');

insert into another_table2 values (1, 'at2col1 row1', 'at2col2 row1');
insert into another_table2 values (2, 'at2col1 row2', 'at2col2 row2');
insert into another_table2 values (3, 'at2col1 row3', 'at2col2 row3 TEST3');
insert into another_table2 values (4, 'at2col1 row4', 'at2col2 row4');

create or replace procedure base_table_datastore
(rid in rowid,
alltext in out nocopy clob)
is
begin
for c1 in
(select * from base_table where rowid = rid)
loop
dbms_lob.writeappend (alltext, length (c1.column1), c1.column1);
dbms_lob.writeappend (alltext, 1, ' ');
dbms_lob.writeappend (alltext, length (c1.column2), c1.column2);
dbms_lob.writeappend (alltext, 1, ' ');
dbms_lob.writeappend (alltext, length (c1.column3_ID), c1.column3_ID);
for c2 in
(select * from another_table1 where id = c1.id)
loop
dbms_lob.writeappend (alltext, 1, ' ');
dbms_lob.writeappend (alltext, length (c2.column1), c2.column1);
end loop;
for c3 in
(select * from another_table2 where id = c1.id)
loop
dbms_lob.writeappend (alltext, 1, ' ');
dbms_lob.writeappend (alltext, length (c3.column1), c3.column1);
dbms_lob.writeappend (alltext, 1, ' ');
dbms_lob.writeappend (alltext, length (c3.column2), c3.column2);
end loop;
end loop;
end base_table_datastore;
/
show errors;

set serveroutput on
declare
v_clob clob;
begin
dbms_output.put_line ('------------------------------------------');
for r in
(select rowid from base_table)
loop
dbms_lob.createtemporary (v_clob, true);
base_table_datastore (r.rowid, v_clob);
dbms_output.put_line (v_clob);
dbms_output.put_line ('------------------------------------------');
dbms_lob.freetemporary (v_clob);
end loop;
end;
/

begin
ctx_ddl.create_preference ('single_ds', 'user_datastore');
ctx_ddl.set_attribute ('single_ds', 'procedure', 'base_table_datastore');
ctx_ddl.set_attribute ('single_ds', 'output_type', 'clob');
end;
/

create index your_index on base_table (alltext) indextype is ctxsys.context parameters ('datastore single_ds sync (on commit)');

select token_text from dr$your_index$i;
select id from base_table where contains (alltext, 'test1') > 0;
select id from base_table where contains (alltext, 'test2') > 0;
select id from base_table where contains (alltext, 'test3') > 0;

coté postgresql

drop index idx_base_table_column1_full_text;
drop index idx_another_table1_column1_full_text;
drop index idx_another_table2_column2_full_text;
drop view search_items;
drop table base_table;
drop table another_table1;
drop table another_table2;

create table base_table (id integer , column1 varchar(20), column2 varchar(20), column3_id varchar(20), alltext varchar( 1));
create table another_table1 (id integer, column1 varchar(20));
create table another_table2 (id integer, column1 varchar(20), column2 varchar(20));

insert into base_table values (1, 'btcol1 row1 TEST1', 'btcol2 row1', 'btcol3 row1', null);
insert into base_table values (2, 'btcol1 row2', 'btcol2 row2', 'btcol3 row2', null);
insert into base_table values (3, 'btcol1 row3', 'btcol2 row3', 'btcol3 row3', null);
insert into base_table values (4, 'btcol1 row4', 'btcol2 row4', 'btcol3 row4', null);

insert into another_table1 values (1, 'at1col1 row1');
insert into another_table1 values (2, 'at1col1 row2 TEST2');
insert into another_table1 values (3, 'at1col1 row3');
insert into another_table1 values (4, 'at1col1 row4');

insert into another_table2 values (1, 'at2col1 row1', 'at2col2 row1');
insert into another_table2 values (2, 'at2col1 row2', 'at2col2 row2');
insert into another_table2 values (3, 'at2col1 row3', 'at2col2 row3 TEST3');
insert into another_table2 values (4, 'at2col1 row4', 'at2col2 row4');

CREATE INDEX idx_base_table_column1_full_text
ON base_table
USING GIN (to_tsvector('english', column1)) ;

CREATE INDEX idx_another_table1_column1_full_text
ON another_table1
USING GIN (to_tsvector('english', column1)) ;

CREATE INDEX idx_another_table2_column2_full_text
ON another_table2
USING GIN (to_tsvector('english', column2)) ;

CREATE VIEW search_items AS
SELECT id, text 'base_table' AS origin_table, column1 AS column1, to_tsvector('english', column1) AS searchable_element FROM base_table
UNION ALL
SELECT id, text 'another_table1' AS origin_table, column1 AS column1, to_tsvector('english', column1) AS searchable_element1 FROM another_table1
UNION ALL
SELECT id, text 'another_table2' AS origin_table, column2 AS column2, to_tsvector('english', column2) AS searchable_element2 FROM another_table2 ;

SELECT id FROM search_items WHERE plainto_tsquery('english', 'test2') @@ searchable_element;
SELECT id FROM search_items WHERE plainto_tsquery('english', 'test1') @@ searchable_element;
SELECT id FROM search_items WHERE plainto_tsquery('english', 'test3') @@ searchable_element;

________________________________
De : CRUMEYROLLE Pierre
Envoyé : mercredi 26 janvier 2022 11:25
À : pgsql-fr-generale(at)postgresql(dot)org <pgsql-fr-generale(at)postgresql(dot)org>
Objet : [ oracle texte] migration oracle vers postgresql

Bonjour
Quelqu'un a-t-il des pistes pour migrer de l'oracle text vers PostgreSQL ? C'est faisable ?

Ci-dessous un aperçu de l'existant oracle (un peu usine à gaz)

Cordialement

create or replace procedure PR_ITEM_FEEDER
(r in rowid, c in out nocopy clob)
as
begin
for x in (select D.CONCLUSION, S.DESC_REPH, S.BEST_PRAC, S.ASSO_DOC,
S.MIT_ACT, S.ROOT_CAUSE, S.FINAL_SOL, S.SC_DEC, S.MAJ_STAT,
I.DESCRIPTION, I.TITLE, I.REFERENCE
from ITEM I
left join DETAIL D on D.ID = I.DETAIL_FK
left join SUMMARY S on S.ID = I.PUBLISHED_SUMMARY_FK
where I.ROWID = r)
loop
if x.CONCLUSION is not null then
dbms_lob.writeappend(c, length(x.CONCLUSION), x.CONCLUSION);
dbms_lob.writeappend(c, 1, ' ');
end if;
if x.DESC_REPH is not null then
dbms_lob.writeappend(c, length(x.DESC_REPH), x.DESC_REPH);
dbms_lob.writeappend(c, 1, ' ');
end if;
if x.BEST_PRAC is not null then
dbms_lob.writeappend(c, length(x.BEST_PRAC), x.BEST_PRAC);
dbms_lob.writeappend(c, 1, ' ');
end if;
if x.ASSO_DOC is not null then
dbms_lob.writeappend(c, length(x.ASSO_DOC), x.ASSO_DOC);
dbms_lob.writeappend(c, 1, ' ');
end if;
if x.MIT_ACT is not null then
dbms_lob.writeappend(c, length(x.MIT_ACT), x.MIT_ACT);
dbms_lob.writeappend(c, 1, ' ');
end if;
if x.ROOT_CAUSE is not null then
dbms_lob.writeappend(c, length(x.ROOT_CAUSE), x.ROOT_CAUSE);
dbms_lob.writeappend(c, 1, ' ');
end if;
if x.FINAL_SOL is not null then
dbms_lob.writeappend(c, length(x.FINAL_SOL), x.FINAL_SOL);
dbms_lob.writeappend(c, 1, ' ');
end if;
if x.SC_DEC is not null then
dbms_lob.writeappend(c, length(x.SC_DEC), x.SC_DEC);
dbms_lob.writeappend(c, 1, ' ');
end if;
if x.MAJ_STAT is not null then
dbms_lob.writeappend(c, length(x.MAJ_STAT), x.MAJ_STAT);
dbms_lob.writeappend(c, 1, ' ');
end if;
dbms_lob.writeappend(c, length(x.TITLE), x.TITLE);
dbms_lob.writeappend(c, 1, ' ');
dbms_lob.writeappend(c, length(x.DESCRIPTION), x.DESCRIPTION);
dbms_lob.writeappend(c, 1, ' ');
dbms_lob.writeappend(c, length(x.REFERENCE), x.REFERENCE);
dbms_lob.writeappend(c, 1, ' ');
end loop;
end;
/
GRANT ALL ON PR_ITEM_FEEDER TO D220_FAIR_SERVICE;
/

create or replace trigger TR_UPDATE_TEXT_ITEM
before update of DESCRIPTION, REFERENCE, TITLE on ITEM
for each row
begin
:new.TEXT_INDEX := :old.TEXT_INDEX;
end;
/
show errors trigger TR_UPDATE_TEXT_ITEM;
/

create or replace trigger TR_UPDATE_TEXT_DETAIL
before update of CONCLUSION on DETAIL
for each row
begin
update ITEM set TEXT_INDEX=NULL where DETAIL_FK=:old.ID;
end;
/
show errors trigger TR_UPDATE_TEXT_DETAIL;
/

create or replace trigger TR_UPDATE_TEXT_SUMMARY
before update of DESC_REPH, BEST_PRAC, ASSO_DOC,
MIT_ACT, ROOT_CAUSE, FINAL_SOL, SC_DEC, MAJ_STAT on SUMMARY
for each row
begin
update ITEM set TEXT_INDEX=NULL where PUBLISHED_SUMMARY_FK=:old.ID;
end;
/
show errors trigger TR_UPDATE_TEXT_SUMMARY;
/

begin
ctx_ddl.create_preference('itemdatastore', 'user_datastore');
ctx_ddl.set_attribute('itemdatastore', 'procedure', 'PR_ITEM_FEEDER');
ctx_ddl.set_attribute('itemdatastore', 'output_type', 'CLOB');
end;
/

begin
ctx_ddl.create_preference('fairstorage', 'BASIC_STORAGE');
ctx_ddl.set_attribute('fairstorage', 'I_TABLE_CLAUSE',
'tablespace D220_ISP_TSDATA_CTX lob (token_info) store as (tablespace D220_ISP_TSLOB_CTX)');
ctx_ddl.set_attribute('fairstorage', 'K_TABLE_CLAUSE',
'tablespace D220_ISP_TSDATA_CTX');
ctx_ddl.set_attribute('fairstorage', 'R_TABLE_CLAUSE',
'tablespace D220_ISP_TSDATA_CTX lob (data) store as (tablespace D220_ISP_TSLOB_CTX disable storage in row cache)');
ctx_ddl.set_attribute('fairstorage', 'N_TABLE_CLAUSE',
'tablespace D220_ISP_TSDATA_CTX');
ctx_ddl.set_attribute('fairstorage', 'I_INDEX_CLAUSE',
'tablespace D220_ISP_TSINDEX_CTX compress 2');
ctx_ddl.set_attribute('fairstorage', 'P_TABLE_CLAUSE',
'tablespace D220_ISP_TSDATA_CTX');
end;
/

begin
ctx_ddl.create_preference('fairwordlist', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('fairwordlist', 'substring_index', 'TRUE');
end;
/

create index IX_ITEM on ITEM(TEXT_INDEX)
indextype is ctxsys.context
parameters ('datastore itemdatastore
storage fairstorage
wordlist fairwordlist
sync (on commit)');
/

create index IX_COMMENTS on COMMENTS(CONTENT)
indextype is ctxsys.context
parameters ('storage fairstorage
wordlist fairwordlist
sync (on commit)');
/

create index IX_ASSESSMENT on ASSESSMENT(CONTENT)
indextype is ctxsys.context
parameters ('storage fairstorage
wordlist fairwordlist
sync (on commit)');
/

create index IX_VOTE on VOTE(CONTENT)
indextype is ctxsys.context
parameters ('storage fairstorage
wordlist fairwordlist
sync (on commit)');
/

create index IX_FEEDBACK on FEEDBACK(CONTENT)
indextype is ctxsys.context
parameters ('storage fairstorage
wordlist fairwordlist
sync (on commit)');
/

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message celati Laurent 2022-02-16 10:34:34 Desactiver le mode Read Only sur une table ?
Previous Message Marie-Claude Quidoz 2022-01-27 12:37:29 RE: [ oracle texte] migration oracle vers postgresql