Porting Oracle Applications to PostgreSQL



Similar documents
Programming with SQL

Porting from Oracle to PostgreSQL

Oracle Database: SQL and PL/SQL Fundamentals

SQL Databases Course. by Applied Technology Research Center. This course provides training for MySQL, Oracle, SQL Server and PostgreSQL databases.

Oracle Database: SQL and PL/SQL Fundamentals NEW


Oracle Database 12c: Introduction to SQL Ed 1.1

Oracle Database: Introduction to SQL

Topics Advanced PL/SQL, Integration with PROIV SuperLayer and use within Glovia

Oracle Database: Introduction to SQL

Instant SQL Programming

Oracle Database: SQL and PL/SQL Fundamentals

Duration Vendor Audience 5 Days Oracle End Users, Developers, Technical Consultants and Support Staff

Oracle to MySQL Migration

Oracle SQL. Course Summary. Duration. Objectives

Oracle Database: SQL and PL/SQL Fundamentals NEW

Linas Virbalas Continuent, Inc.

PostgreSQL Concurrency Issues

sqlite driver manual

Database Migration from MySQL to RDM Server

Optimizing with Open Source Technology Postgres

Oracle Database: Introduction to SQL

1 Stored Procedures in PL/SQL 2 PL/SQL. 2.1 Variables. 2.2 PL/SQL Program Blocks

Oracle Database 11g SQL

Oracle. Brief Course Content This course can be done in modular form as per the detail below. ORA-1 Oracle Database 10g: SQL 4 Weeks 4000/-

How To Create A Table In Sql (Ahem)

3.GETTING STARTED WITH ORACLE8i

SQL Server to Oracle A Database Migration Roadmap

Oracle Database 11g Express Edition PL/SQL and Database Administration Concepts -II

Oracle Architecture, Concepts & Facilities

Database Extensions Visual Walkthrough. PowerSchool Student Information System

Migrating from Sybase to SQL Server

Making the Most of Oracle PL/SQL Error Management Features

Handling Exceptions. Copyright 2006, Oracle. All rights reserved. Oracle Database 10g: PL/SQL Fundamentals 8-1

SQL Server for developers. murach's TRAINING & REFERENCE. Bryan Syverson. Mike Murach & Associates, Inc. Joel Murach

Comparison of Open Source RDBMS

1 Changes in this release

Oracle PL/SQL Best Practices

Database Programming with PL/SQL: Learning Objectives

Oracle Database 10g: Introduction to SQL

Handling Exceptions. Schedule: Timing Topic 45 minutes Lecture 20 minutes Practice 65 minutes Total

Oracle 10g PL/SQL Training

Course -Oracle 10g SQL (Exam Code IZ0-047) Session number Module Topics 1 Retrieving Data Using the SQL SELECT Statement

Bruce Momjian June, Postgres Plus Technical Overview

Using SQL Developer. Copyright 2008, Oracle. All rights reserved.

Teradata Utilities Class Outline

Programming Database lectures for mathema

MOC 20461C: Querying Microsoft SQL Server. Course Overview

Using SQL Server Management Studio

4 Logical Design : RDM Schema Definition with SQL / DDL

PL/SQL Programming. Oracle Database 12c. Oracle Press ORACLG. Michael McLaughlin. Mc Graw Hill Education

Oracle Database 12c Enables Quad Graphics to Quickly Migrate from Sybase to Oracle Exadata

php tek 2006 in Orlando Florida Lukas Kahwe Smith

Netezza SQL Class Outline

4 Simple Database Features

MySQL for Beginners Ed 3

Database Extension 1.5 ez Publish Extension Manual

Consulting. Personal Attention, Expert Assistance

Handling Exceptions. Schedule: Timing Topic. 45 minutes Lecture 20 minutes Practice 65 minutes Total

PL/SQL MOCK TEST PL/SQL MOCK TEST I

Maintaining Stored Procedures in Database Application

ORACLE TO SYBASE ASE MIGRATION GUIDE

Choosing a Data Model for Your Database

Objectives. Oracle SQL and SQL*PLus. Database Objects. What is a Sequence?

Guide to SQL Programming: SQL:1999 and Oracle Rdb V7.1

Oracle SQL and PL/SQL Bad Practices

Oracle SQL Developer for Database Developers. An Oracle White Paper September 2008

MyOra 3.0. User Guide. SQL Tool for Oracle. Jayam Systems, LLC

PL/JSON Reference Guide (version 1.0.4)

Expert Oracle. Database Architecture. Techniques and Solutions. 10gr, and 11g Programming. Oracle Database 9/, Second Edition.

news from Tom Bacon about Monday's lecture

Discovering SQL. Wiley Publishing, Inc. A HANDS-ON GUIDE FOR BEGINNERS. Alex Kriegel WILEY

Oracle For Beginners Page : 1

Review your answers, feedback, and question scores below. An asterisk (*) indicates a correct answer.

Oracle Database: Program with PL/SQL

Managing Objects with Data Dictionary Views. Copyright 2006, Oracle. All rights reserved.

OPP ODTUG Kaleidoscope. An ODTUG SP* Oracle PL/SQL Programming Conference. WOW-Wide Open World, Wide Open Web!

Oracle Migration Workbench

When an exception occur a message which explains its cause is received. PL/SQL Exception message consists of three parts.

MS SQL Performance (Tuning) Best Practices:

Migrate Topaz databases from One Server to Another

5.1 Database Schema Schema Generation in SQL

Handling Exceptions. Copyright 2008, Oracle. All rights reserved.

Answers to the Try It Yourself Sections

An Oracle White Paper June Migrating Applications and Databases with Oracle Database 12c

LearnFromGuru Polish your knowledge

Creating PL/SQL Blocks. Copyright 2007, Oracle. All rights reserved.

SQL Server An Overview

Oracle SQL Developer for Database Developers. An Oracle White Paper June 2007

Toad for Oracle 8.6 SQL Tuning

Handling PL/SQL Errors

Database migration. from Sybase ASE to PostgreSQL. Achim Eisele and Jens Wilke. 1&1 Internet AG

"SQL Database Professional " module PRINTED MANUAL

Duration Vendor Audience 5 Days Oracle Developers, Technical Consultants, Database Administrators and System Analysts

AV-004: Administering and Programming with ORACLE

MyOra 3.5. User Guide. SQL Tool for Oracle. Kris Murthy

OLH: Oracle Loader for Hadoop OSCH: Oracle SQL Connector for Hadoop Distributed File System (HDFS)

Ontrack PowerControls V8.1 for SQL ReadMe

Transcription:

Porting Oracle Applications to PostgreSQL Peter Eisentraut, credativ GmbH / credativ Ltd. PGCon 2008 Porting Oracle Applications to PostgreSQL: 1 / 80

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

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

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

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

Syntax Identifiers Oracle case folds to upper case, PostgreSQL to lower case. Big trouble if you mix quoted and unquoted identifiers. 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

Table Definition 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

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

Data Types: Specifics 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 float/binary double real/double precision blob, raw, long raw bytea (additional porting required) date date or timestamp Porting Oracle Applications to PostgreSQL: 9 / 80

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

Functions: General Function compatibility is a bottomless pit. PostgreSQL (+ orafce) supports many Oracle compatibility functions. It s easy to write your own. Only the special syntax is trouble. Porting Oracle Applications to PostgreSQL: 11 / 80

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

Functions: Specifics Manual work required here: sysdate current_timestamp or localtimestamp Porting Oracle Applications to PostgreSQL: 13 / 80

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

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

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

Default Parameters: The Hard Case CREATE FUNCTION foo (a int, b int = 5, c int = 0)... This is only callable with named parameters. PostgreSQL doesn t support this. You will have to change your client application. Your project time will double. Porting Oracle Applications to PostgreSQL: 17 / 80

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

Sequences: Creating Sequences are somewhat compatible... Change NOCACHE to CACHE 1 (or omit). MAXVALUE 9999999999999999999999999 needs to be reduced. Don t rely on the caching behavior. Porting Oracle Applications to PostgreSQL: 19 / 80

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

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-specific syntax. Porting is usually straightforward, but requires manual work. Set up test queries to catch porting mistakes. Porting Oracle Applications to PostgreSQL: 21 / 80

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

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

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(+) What s that??? Porting Oracle Applications to PostgreSQL: 24 / 80

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

Indexes Basic syntax the same: CREATE INDEX name ON table (a, b) Primary keys and unique constraints are automatically indexed. Other features are implementation-specific. You will have to re-tune the entire porting result anyway. Porting Oracle Applications to PostgreSQL: 26 / 80

Optimizer Hints Delete them Or keep them for future investigation Usually useless Porting Oracle Applications to PostgreSQL: 27 / 80

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

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 doesn t work. Write a custom operator or rewrite the code. Porting Oracle Applications to PostgreSQL: 29 / 80

Encodings Both Oracle and PostgreSQL support the same ideas. But everything is named differently. Might be a good time to review the encoding and locale choices. Porting Oracle Applications to PostgreSQL: 30 / 80

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

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

XML (untested!) xmltype xml extract xpath XMLELEMENT, XMLATTRIBUTES, etc. are the same. Most functionality is different or missing in PostgreSQL. Porting Oracle Applications to PostgreSQL: 33 / 80

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

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 doesn t catch updates to the same value. You will need to make a choice which behavior you need. Porting Oracle Applications to PostgreSQL: 35 / 80

Things That Won t 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

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

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

ora2pg http://ora2pg.projects.postgresql.org/ Converts Oracle schema definitions Extracts data from Oracle database for import into PostgreSQL Packages available Invaluable Porting Oracle Applications to PostgreSQL: 39 / 80

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

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

Oracle Instant Client Needed for DBD::Oracle and TOra Also contains sqlplus download from Oracle Porting Oracle Applications to PostgreSQL: 42 / 80

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

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

From PL/SQL to PL/pgSQL Compatibility isn t that great, but it s 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

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

Syntax Differences FOR i IN REVERSE 1..10 LOOP Order must be switched for PostgreSQL. Porting Oracle Applications to PostgreSQL: 47 / 80

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

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

Package Variables Not supported by PostgreSQL Write a wrapper based on (temporary) tables. Porting Oracle Applications to PostgreSQL: 50 / 80

Cursors Usually, you need less cursors in PostgreSQL. CURSOR foo IS SELECT...; BEGIN FOR x IN foo LOOP can be simplified to BEGIN FOR x IN SELECT... LOOP Note: The x is defined implicitly in Oracle. In PostgreSQL, you need to declare it. Porting Oracle Applications to PostgreSQL: 51 / 80

Cursors Variables This doesn t 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

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

EXECUTE For DDL statements, EXECUTE might be necessary. E. g., EXECUTE CREATE TABLE quote_ident(foo)... Porting Oracle Applications to PostgreSQL: 54 / 80

Subcommits Code that does COMMIT or ROLLBACK needs major, client-side changes. (Savepoints won t usually do the job.) Porting Oracle Applications to PostgreSQL: 55 / 80

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

Exceptions (2) Exception block syntax is the same. Exception names are different. Oracle supports user-defined exception names. Error codes are different. Variable SQLERRM is available. Of course, error messages are also different. Porting Oracle Applications to PostgreSQL: 57 / 80

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

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

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

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

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

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

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

Backup, Recovery Build a new system using transaction log archiving or SQL dumps. Porting Oracle Applications to PostgreSQL: 65 / 80

Setup, initdb Works completely differently. 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

JDBC Works great, aside from SQL syntax issues Porting Oracle Applications to PostgreSQL: 67 / 80

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

Testing Have a test suite for: functions setup tables/database contents Porting Oracle Applications to PostgreSQL: 69 / 80

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

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 different. Porting Oracle Applications to PostgreSQL: 71 / 80

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

Version Control Use version control, even if the client doesn t. Prefer to use your own VCS; merge later. Porting Oracle Applications to PostgreSQL: 73 / 80

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 doesn t 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

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 won t compile/run on newer operating systems. Half your tools won t compile/run on the old operating system. Everything is locked down, so you can t do anything about this. Evaluate this carefully before starting the project. Porting Oracle Applications to PostgreSQL: 75 / 80

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 affects your entire system. The client must be willing, able, and available to participate in the project. Porting Oracle Applications to PostgreSQL: 76 / 80

Josh s Rules (of Database Contracting) http://blogs.ittoolbox.com/database/soup/archives/ joshs-rules-of-database-contracting-17253 Learn them by heart. Print them out. Post them at your office door. Quote them to the sales people. Porting Oracle Applications to PostgreSQL: 77 / 80

Contribute Your Improvements Porting projects are a great source of ideas for features and bug fixes. 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

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

Fly Way to Conclude SQL-Themed Presentation COMMIT; Porting Oracle Applications to PostgreSQL: 80 / 80