Sunteți pe pagina 1din 10

Transcript of "Porting Oracle Applications to PostgreSQL"

1. 1. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Porting Oracle Applications to PostgreSQL Peter Eisentraut, credativ
GmbH / credativ Ltd. PGCon 2008 Porting Oracle Applications to PostgreSQL: 1 / 80
2. 2. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Disclaimers This presentation was written by a PostgreSQL expert, not
an Oracle expert. Both Oracle and PostgreSQL are diverse, complex, and moving
targets. Both Oracle and PostgreSQL are (probably) Turing-complete, so almost
anything is possible, but we are looking for reasonable options. Porting Oracle
Applications to PostgreSQL: 2 / 80
3. 3. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management You Will See . . . Porting projects are hard. Compatibility and
compatibility layers are an illusion. It might be better not to do it. But success can be
very rewarding. Porting Oracle Applications to PostgreSQL: 3 / 80
4. 4. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outline 1 Porting the SQL 2 Porting Tools 3 PL/SQL vs. PL/pgSQL 4
Interfaces 5 Project Management Porting Oracle Applications to PostgreSQL: 4 / 80
5. 5. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outline 1 Porting the SQL 2 Porting Tools 3 PL/SQL vs. PL/pgSQL 4
Interfaces 5 Project Management Porting Oracle Applications to PostgreSQL: 5 / 80
6. 6. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Syntax Identiers Oracle case folds to upper case, PostgreSQL to lower
case. Big trouble if you mix quoted and unquoted identiers. Column aliases SELECT
foo [AS] bar Most Oracle applications omit the AS, but PostgreSQL requires it.
Fixed in PostgreSQL 8.4. MINUS Change to EXCEPT. SQL key words Usually not a
big problem, but should be kept in mind. FROM dual Easy to work around (or use
orafce). Porting Oracle Applications to PostgreSQL: 6 / 80
7. 7. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Table Denition The usual features are mostly the same: columns,
constraints, defaults. Data types are more work; see below. No fancy features like
table of type. Porting Oracle Applications to PostgreSQL: 7 / 80
8. 8. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Data Types: General Both Oracle and PostgreSQL support plenty of
SQL-conforming data types. But usually the nonconforming ones are in wider use.
Thin compatibility layers can usually help, but that will make your PostgreSQL
application unpretty. A big search-and-replace is usually in order. Porting Oracle
Applications to PostgreSQL: 8 / 80
9. 9. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Data Types: Specics varchar2 varchar or text clob, long varchar
or text nchar, nvarchar2, nclob (varchar or text) number numeric or bigint or int

or smallint or double precision or real (bug potential) binary oat/binary double


real/double precision blob, raw, long raw bytea (additional porting required) date
date or timestamp Porting Oracle Applications to PostgreSQL: 9 / 80
10. 10. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Null Values Infamous Oracle behavior: NULL = Consequently, = is
not true Completely weird and inconsistent Usually, your data will just disappear in
PostgreSQL transform_null_equals does not help here If your application relies on any
of this, you are in trouble. Porting Oracle Applications to PostgreSQL: 10 / 80
11. 11. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Functions: General Function compatibility is a bottomless pit.
PostgreSQL (+ orafce) supports many Oracle compatibility functions. Its easy to write
your own. Only the special syntax is trouble. Porting Oracle Applications to
PostgreSQL: 11 / 80
12. 12. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Functions: Compatibility For example, the following common functions
are supported by PostgreSQL as well: substr to char nvl, nullif (orafce) Porting Oracle
Applications to PostgreSQL: 12 / 80
13. 13. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Functions: Specics Manual work required here: sysdate
current_timestamp or localtimestamp Porting Oracle Applications to PostgreSQL: 13 /
80
14. 14. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Functions: decode DECODE(expr, search, expr[, search, expr...] [,
default]) becomes CASE WHEN expr THEN search .. ELSE default END Porting
Oracle Applications to PostgreSQL: 14 / 80
15. 15. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Default Parameters: Overview PostgreSQL supports neither default
values for parameters nor named parameters in function calls. Oracle applications
make ample use of both. Porting Oracle Applications to PostgreSQL: 15 / 80
16. 16. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Default Parameters: The Easy Case CREATE FUNCTION foo (a int, b
int, c int = 0) ... becomes CREATE FUNCTION foo (a int, b int, c int) ... CREATE
FUNCTION foo (a int, b int) ... AS $$ SELECT foo(a, b, 0) $$; Porting Oracle
Applications to PostgreSQL: 16 / 80
17. 17. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Default Parameters: The Hard Case CREATE FUNCTION foo (a int, b
int = 5, c int = 0) ... This is only callable with named parameters. PostgreSQL doesnt
support this. You will have to change your client application. Your project time will
double. Porting Oracle Applications to PostgreSQL: 17 / 80
18. 18. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Default Parameters: Conclusion Approx. 97% of applications to be

ported contain issues like this. Client code must be reworked. Adding this support in
PostgreSQL would be a great feature. Porting Oracle Applications to PostgreSQL: 18 /
80
19. 19. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Sequences: Creating Sequences are somewhat compatible . . . Change
NOCACHE to CACHE 1 (or omit). MAXVALUE 9999999999999999999999999
needs to be reduced. Dont rely on the caching behavior. Porting Oracle Applications
to PostgreSQL: 19 / 80
20. 20. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Sequences: Using Oracle syntax: sequence_name.nextval PostgreSQL
syntax: nextval(sequence_name) Search-and-replace; but direct sequence calls are
rare. Porting Oracle Applications to PostgreSQL: 20 / 80
21. 21. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outer Joins: Overview PostgreSQL only supports the SQL-standard
outer join syntax. Oracle supports it since version 9. Most Oracle code uses the old,
Oracle-specic syntax. Porting is usually straightforward, but requires manual work.
Set up test queries to catch porting mistakes. Porting Oracle Applications to
PostgreSQL: 21 / 80
22. 22. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outer Joins: Simple Example SELECT * FROM a, b WHERE a.x =
b.y(+) becomes SELECT * FROM a LEFT JOIN b ON a.x = b.y Porting Oracle
Applications to PostgreSQL: 22 / 80
23. 23. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outer Joins: Complex Example SELECT ... FROM A, B, C WHERE
A.A_ID (+) = B.A_ID AND C.C_KEY(+) = B.C_KEY becomes SELECT ... FROM A
RIGHT JOIN B ON (A.A_ID = B.A_ID) LEFT JOIN C ON (C.C_KEY = B.C_KEY)
Porting Oracle Applications to PostgreSQL: 23 / 80
24. 24. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outer Joins: Unclear Example SELECT ... FROM A, B, C, D, E
WHERE A.A_ID = B.A_ID AND B.B_ID = C.A_ID(+) AND B.B_KEY =
C.B_KEY(+) AND C.C_ID = D.C_ID(+) AND B.A_ID = E.A_ID(+) AND B.B_KEY
= E.B_KEY(+) AND CONSTANT = C.X_ID(+) Whats that??? Porting Oracle
Applications to PostgreSQL: 24 / 80
25. 25. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Locking Transaction isolation, locking, SELECT FOR UPDATE behave
pretty much the same. Oracle also defaults to read committed. Usually, no one at the
client has ever heard of concurrency issues, so the code is likely buggy anyway.
Porting Oracle Applications to PostgreSQL: 25 / 80
26. 26. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Indexes Basic syntax the same: CREATE INDEX name ON table (a, b)
Primary keys and unique constraints are automatically indexed. Other features are

implementation-specic. You will have to re-tune the entire porting result anyway.
Porting Oracle Applications to PostgreSQL: 26 / 80
27. 27. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Optimizer Hints Delete them Or keep them for future investigation
Usually useless Porting Oracle Applications to PostgreSQL: 27 / 80
28. 28. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Date Formatting TO_CHAR is largely compatible. Warning: PostgreSQL
version is not very robust. One-argument variant provided by orafce
NLS_DATE_FORMAT is replaced by locale settings. Porting Oracle Applications to
PostgreSQL: 28 / 80
29. 29. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Date Arithmetic Usually, date arithmetic is easier in PostgreSQL, so
consider a small code rewrite. orafce provides compatibility functions, such as
last_day, add_months. Oracle code often does date + int . . . In PostgreSQL, this may
become timestamp + int. This doesnt work. Write a custom operator or rewrite the
code. Porting Oracle Applications to PostgreSQL: 29 / 80
30. 30. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Encodings Both Oracle and PostgreSQL support the same ideas. But
everything is named dierently. Might be a good time to review the encoding and
locale choices. Porting Oracle Applications to PostgreSQL: 30 / 80
31. 31. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management NLS * vs. LC * Approximate analogies: NLS CALENDAR NLS
COMP lc collate = C NLS CURRENCY lc monetary NLS DATE FORMAT
DateStyle NLS DATE LANGUAGE lc messages, lc time (8.4?) NLS LANG, NLS
LANGUAGE LANG, client encoding NLS NCHAR NLS NUMERIC
CHARACTERS lc numeric NLS SORT lc collate NLS TERRITORY LANG, lc *
Porting Oracle Applications to PostgreSQL: 31 / 80
32. 32. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management ROWNUM and ROWID ROWNUM: Use generate_series, or Rewrite
and apply LIMIT, or Just handle in the client ROWID: Analogous to ctid Good code
should usually not use this. That does not prevent some from trying. Porting Oracle
Applications to PostgreSQL: 32 / 80
33. 33. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management XML (untested!) xmltype xml extract xpath XMLELEMENT,
XMLATTRIBUTES, etc. are the same. Most functionality is dierent or missing in
PostgreSQL. Porting Oracle Applications to PostgreSQL: 33 / 80
34. 34. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Triggers: Declarations Oracle uses inline trigger actions: CREATE
TRIGGER foo AFTER action ON table AS BEGIN ... END; becomes CREATE OR
REPLACE FUNCTION foo_tg() RETURNS TRIGGER LANGUAGE xxx AS $$ ... $
$; CREATE TRIGGER foo AFTER action ON table EXECUTE PROCEDURE

foo_tg(); Note: FOR EACH STATEMENT is the default in Oracle and PostgreSQL.
Porting Oracle Applications to PostgreSQL: 34 / 80
35. 35. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Triggers: Column-Level Triggers Oracle supports column-level triggers:
CREATE TRIGGER foo BEFORE UPDATE OF column ON table AS BEGIN ...
END; becomes CREATE OR REPLACE FUNCTION foo_tg() RETURNS TRIGGER
LANGUAGE xxx AS $$ BEGIN IF NEW.column IS NOT DISTINCT FROM
OLD.column THEN RETURN NEW; END IF; ... -- normal code END; $$; CREATE
TRIGGER foo AFTER action ON table EXECUTE PROCEDURE foo_tg(); But this
doesnt catch updates to the same value. You will need to make a choice which
behavior you need. Porting Oracle Applications to PostgreSQL: 35 / 80
36. 36. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Things That Wont Work Directly CONNECT BY Try contrib/tablefunc.
Materialized views Write your own wrapper. Snapshots Write your own wrapper.
Database links Use contrib/dblink plus views. Autonomous transactions Try dblink.
Synonyms Try views or wrapper or schema path. Partitioning Write your own system.
Porting Oracle Applications to PostgreSQL: 36 / 80
37. 37. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outline 1 Porting the SQL 2 Porting Tools 3 PL/SQL vs. PL/pgSQL 4
Interfaces 5 Project Management Porting Oracle Applications to PostgreSQL: 37 / 80
38. 38. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management orafce http://orafce.projects.postgresql.org/ Large set of Oracle
compatibility functions dual table Debian and RPM packages available Invaluable
Porting Oracle Applications to PostgreSQL: 38 / 80
39. 39. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management ora2pg http://ora2pg.projects.postgresql.org/ Converts Oracle schema
denitions Extracts data from Oracle database for import into PostgreSQL Packages
available Invaluable Porting Oracle Applications to PostgreSQL: 39 / 80
40. 40. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management TOra http://tora.sourceforge.net/ GUI for PostgreSQL and Oracle
Contains exploration and debugging facilities for Oracle Packages available, but
usually without Oracle support Generally a bit outdated, but good for this purpose
Porting Oracle Applications to PostgreSQL: 40 / 80
41. 41. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management DBD::Oracle http://search.cpan.org/dist/DBD-Oracle/ Needed for
ora2pg Also helpful for test scripts etc. Building it can be challenging Debian and
RPM packages available Porting Oracle Applications to PostgreSQL: 41 / 80
42. 42. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Oracle Instant Client Needed for DBD::Oracle and TOra Also contains
sqlplus download from Oracle Porting Oracle Applications to PostgreSQL: 42 / 80

43. 43. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Oracle Database Express Edition Use this for testing if you have no other
Oracle instance. download from Oracle Porting Oracle Applications to PostgreSQL:
43 / 80
44. 44. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outline 1 Porting the SQL 2 Porting Tools 3 PL/SQL vs. PL/pgSQL 4
Interfaces 5 Project Management Porting Oracle Applications to PostgreSQL: 44 / 80
45. 45. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management From PL/SQL to PL/pgSQL Compatibility isnt that great, but its
obviously the best choice. The PL/pgSQL parser is DAAB. See also
http://www.postgresql.org/docs/current/ static/plpgsql-porting.html. Porting Oracle
Applications to PostgreSQL: 45 / 80
46. 46. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Function Creation CREATE FUNCTION ... RETURN type becomes
CREATE FUNCTION ... RETURNS type Function body must be quoted (dollar
quoting). Various other details are incompatible: LANGUAGE STRICT, STABLE,
etc. For variable declarations, DECLARE is needed in PostgreSQL. Porting Oracle
Applications to PostgreSQL: 46 / 80
47. 47. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Syntax Dierences FOR i IN REVERSE 1..10 LOOP Order must be
switched for PostgreSQL. Porting Oracle Applications to PostgreSQL: 47 / 80
48. 48. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Variables PL/SQL can distinguish column names and variable names.
PL/pgSQL replaces all matching tokens by variables. Find a namespacing mechanism
to tell apart variables, parameters, and columns. Porting Oracle Applications to
PostgreSQL: 48 / 80
49. 49. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Packages Use schemas to group your functions. Call syntax is about the
same. But there is no equivalent public/private mechanism. Porting Oracle
Applications to PostgreSQL: 49 / 80
50. 50. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Package Variables Not supported by PostgreSQL Write a wrapper based
on (temporary) tables. Porting Oracle Applications to PostgreSQL: 50 / 80
51. 51. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Cursors Usually, you need less cursors in PostgreSQL. CURSOR foo IS
SELECT ...; BEGIN FOR x IN foo LOOP can be simplied to BEGIN FOR x IN
SELECT ... LOOP Note: The x is dened implicitly in Oracle. In PostgreSQL, you
need to declare it. Porting Oracle Applications to PostgreSQL: 51 / 80
52. 52. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Cursors Variables This doesnt work in PostgreSQL: CURSOR foo IS
SELECT ...; x foo%ROWTYPE; BEGIN FOR x IN foo LOOP Use RECORD:

DECLARE CURSOR foo IS SELECT ..; x RECORD; BEGIN FOR x IN foo LOOP
Porting Oracle Applications to PostgreSQL: 52 / 80
53. 53. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management PERFORM In PostgreSQL, procedure calls must start with
PERFORM. E. g., service.put_utl(Error); becomes PERFORM
service.put_utl(Error); Porting Oracle Applications to PostgreSQL: 53 / 80
54. 54. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management EXECUTE For DDL statements, EXECUTE might be necessary. E. g.,
EXECUTE CREATE TABLE || quote_ident(foo) || ... Porting Oracle Applications to
PostgreSQL: 54 / 80
55. 55. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Subcommits Code that does COMMIT or ROLLBACK needs major,
client-side changes. (Savepoints wont usually do the job.) Porting Oracle
Applications to PostgreSQL: 55 / 80
56. 56. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Exceptions (1) An exception rolls back all changes implicitly in
PostgreSQL. You can drop most savepoint-using code from the Oracle version. More
complex behavior needs a redesign. Porting Oracle Applications to PostgreSQL: 56 /
80
57. 57. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Exceptions (2) Exception block syntax is the same. Exception names are
dierent. Oracle supports user-dened exception names. Error codes are dierent.
Variable SQLERRM is available. Of course, error messages are also dierent. Porting
Oracle Applications to PostgreSQL: 57 / 80
58. 58. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Exceptions (3) We use a scheme to encode exception information into
the message string: RAISE name; ---> RAISE EXCEPTION name; Similar for error
codes: raise_application_error(12345, msg); ---> RAISE EXCEPTION
+12345:msg; Codes can be positive or negative. Write a wrapper function. errcode :=
substr(SQLERRM, 1, 6) Porting Oracle Applications to PostgreSQL: 58 / 80
59. 59. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management No Data Found Exceptions Oracle throws NO_DATA_FOUND
exceptions for SELECT INSERT UPDATE DELETE PostgreSQL only for: SELECT
INTO STRICT Use IF NOT FOUND to deal with other cases. Porting Oracle
Applications to PostgreSQL: 59 / 80
60. 60. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Logging dbms_output package is provided by orafce. E. g.
dbms_output.put_line(WRONG PARAMETER: || par); Watch for interferences from
null values! Porting Oracle Applications to PostgreSQL: 60 / 80
61. 61. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Backtraces orafce provides dbms_utility.format_call_stack() impossible

to implement dbms_utility.format_error_stack() in PostgreSQL (except by patching


PL/pgSQL directly) Porting Oracle Applications to PostgreSQL: 61 / 80
62. 62. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management What About PL/Java? Should be compatible with SQL/JRT and Oracle
Basic functionality should work without changes Reality is more complex There is
little or no experience with this scenario. Porting Oracle Applications to PostgreSQL:
62 / 80
63. 63. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outline 1 Porting the SQL 2 Porting Tools 3 PL/SQL vs. PL/pgSQL 4
Interfaces 5 Project Management Porting Oracle Applications to PostgreSQL: 63 / 80
64. 64. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management psql/sqlplus psql is much nicer for interactive use. :-) sqlplus is much
nicer for scripting use. :-( With use of variables and naming conventions, sqlplus
scripts can be converted anyway. Consider a wholesale rewrite. Porting Oracle
Applications to PostgreSQL: 64 / 80
65. 65. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Backup, Recovery Build a new system using transaction log archiving or
SQL dumps. Porting Oracle Applications to PostgreSQL: 65 / 80
66. 66. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Setup, initdb Works completely dierently. Forget everything you get
from Oracle. Write new setup scripts that integrate well with the operating system.
Forget about tablespaces, partitioning, OS tuning, etc. until you have a porting result.
Porting Oracle Applications to PostgreSQL: 66 / 80
67. 67. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management JDBC Works great, aside from SQL syntax issues Porting Oracle
Applications to PostgreSQL: 67 / 80
68. 68. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Outline 1 Porting the SQL 2 Porting Tools 3 PL/SQL vs. PL/pgSQL 4
Interfaces 5 Project Management Porting Oracle Applications to PostgreSQL: 68 / 80
69. 69. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Testing Have a test suite for: functions setup tables/database contents
Porting Oracle Applications to PostgreSQL: 69 / 80
70. 70. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Dividing the Work In PL/SQL-heavy applications, you can usually
divide the work by function or package. Someone needs to drive and monitor
integration work. Have a test suite. Porting Oracle Applications to PostgreSQL: 70 /
80
71. 71. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Long-Term Maintenance Will the original application continue to be
developed? . . . while the porting project runs?!? How is the merging going to work?

One time ports, maintainable ports, and mergeable ports are all slightly dierent.
Porting Oracle Applications to PostgreSQL: 71 / 80
72. 72. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Code Formatting Create a code formatting standard. (This applies to any
development project.) I tend to stick with the original layout. This is important for
later updates, merges, and maintenance. Porting Oracle Applications to PostgreSQL:
72 / 80
73. 73. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Version Control Use version control, even if the client doesnt. Prefer to
use your own VCS; merge later. Porting Oracle Applications to PostgreSQL: 73 / 80
74. 74. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Beyond the SQL Applications also contain setup and maintenance
scripts. These were typically written by old-school Oracle administrators. Hence
completely incomprehensible and written in ksh Half the logic usually doesnt make
sense for PostgreSQL. Half the logic required to make PostgreSQL work will not have
been written yet. Reserve plenty of time for dealing with this. Porting Oracle
Applications to PostgreSQL: 74 / 80
75. 75. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Legacy Code and Legacy Environments Applications to be ported are
usually very old and crufty. This multiplies the time required to deal with them. A lot
of the code wont compile/run on newer operating systems. Half your tools wont
compile/run on the old operating system. Everything is locked down, so you cant do
anything about this. Evaluate this carefully before starting the project. Porting Oracle
Applications to PostgreSQL: 75 / 80
76. 76. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Client Participation Almost always, the database clients will need to be
adjusted. Almost always, you need someone reachable who understands the code.
Clients think SQL code is a black box with a clean and simple interface. In practice, a
port is like a major new software release. A port aects your entire system. The client
must be willing, able, and available to participate in the project. Porting Oracle
Applications to PostgreSQL: 76 / 80
77. 77. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Joshs Rules (of Database Contracting)
http://blogs.ittoolbox.com/database/soup/archives/ joshs-rules-of-databasecontracting-17253 Learn them by heart. Print them out. Post them at your oce door.
Quote them to the sales people. Porting Oracle Applications to PostgreSQL: 77 / 80
78. 78. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Contribute Your Improvements Porting projects are a great source of
ideas for features and bug xes. Record your experiences, e. g., in the wiki. Contribute
to orafce and ora2pg. Contribute to PL/pgSQL and PL/Java. Porting Oracle
Applications to PostgreSQL: 78 / 80

79. 79. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Coincidence? If you need help: Oracle Ask Tom:
http://asktom.oracle.com/ PostgreSQL Ask Tom: tgl@sss.pgh.pa.us Porting Oracle
Applications to PostgreSQL: 79 / 80
80. 80. Porting the SQL Porting Tools PL/SQL vs. PL/pgSQL Interfaces Project
Management Fly Way to Conclude SQL-Themed Presentation COMMIT; Porting
Oracle Applications to PostgreSQL: 80 / 80

S-ar putea să vă placă și