The Oracle database export can be limited to a specific schema or namespace, this can be mandatory following the database connection user.
SCHEMA
This directive is used to set the schema name to use during export. For example,
SCHEMA APPS
will extract objects associated to theAPPS
schema.When no schema name is provided and
EXPORT_SCHEMA
is enabled, ora2pgpro will export all objects from all schemas of the Oracle instance with their names prefixed with the schema name.EXPORT_SCHEMA
By default, the Oracle schema is not exported into the Postgres Pro database, and all objects are created under the default Postgres Pro namespace. If you also want to export this schema and create all objects under this namespace, set the
EXPORT_SCHEMA
directive to 1. This will set the schemasearch_path
at the top of the export SQL file to the schema name set in theSCHEMA
directive with the defaultpg_catalog
schema. If you want to change this path, use the directivePG_SCHEMA
.CREATE_SCHEMA
Enable/disable the CREATE SCHEMA command at starting of the output file. It is enabled by default and concerns the
TABLE
export type.COMPILE_SCHEMA
By default ora2pgpro will only export valid PL/SQL code. You can force Oracle to compile again the invalidated code to get a chance to have it obtain the valid status and then be able to export it.
Enable this directive to force Oracle to compile schema before exporting code. When this directive is enabled, and
SCHEMA
is set to a specific schema name, only invalid objects in this schema will be recompiled. IfSCHEMA
is not set, then all schemas will be recompiled. To force recompile invalid objects in a specific schema, setCOMPILE_SCHEMA
to the schema name you want to recompile.This will ask to Oracle to validate the PL/SQL code that could have been invalidated after an export/import, for example. The
VALID
orINVALID
status applies to functions, procedures, packages, and user-defined types. It also concerns disabled triggers.EXPORT_INVALID
If the above configuration directive is not enough to validate your PL/SQL code, enable this configuration directive to allow export of all PL/SQL code even if it is marked as invalid. The
VALID
orINVALID
status applies to functions, procedures, packages and user-defined types.PG_SCHEMA
Allows you to define/force the Postgres Pro schema to use. By default, if you set
EXPORT_SCHEMA
to 1, the Postgres Prosearch_path
will be set to the schema name exported set as the value of theSCHEMA
directive.The value can be a comma-separated list of schema names but not when using the
TABLE
export type because in this case it will generate the CREATE SCHEMA statement, and it does not support multiple schema names. For example, if you setPG_SCHEMA
to something likeuser_schema, public
, the search path will be set like this:SET search_path = user_schema, public;
This forces the use of another schema (here
user_schema
) than the one from Oracle schema set inSCHEMA
directive.You can also set the default
search_path
for the Postgres Pro user you are using to connect to the destination database by using:ALTER ROLE username SET search_path TO user_schema, public;
In this case, you do not have to set
PG_SCHEMA
.SYSUSERS
Without an explicit schema, ora2pgpro will export all objects that do not belong to the system schema or role:
SYSTEM,CTXSYS,DBSNMP,EXFSYS,LBACSYS,MDSYS,MGMT_VIEW, OLAPSYS,ORDDATA,OWBSYS,ORDPLUGINS,ORDSYS,OUTLN, SI_INFORMTN_SCHEMA,SYS,SYSMAN,WK_TEST,WKSYS,WKPROXY, WMSYS,XDB,APEX_PUBLIC_USER,DIP,FLOWS_020100,FLOWS_030000, FLOWS_040100,FLOWS_010600,FLOWS_FILES,MDDATA,ORACLE_OCM, SPATIAL_CSW_ADMIN_USR,SPATIAL_WFS_ADMIN_USR,XS$NULL,PERFSTAT, SQLTXPLAIN,DMSYS,TSMSYS,WKSYS,APEX_040000,APEX_040200, DVSYS,OJVMSYS,GSMADMIN_INTERNAL,APPQOSSYS,DVSYS,DVF, AUDSYS,APEX_030200,MGMT_VIEW,ODM,ODM_MTR,TRACESRV,MTMSYS, OWBSYS_AUDIT,WEBSYS,WK_PROXY,OSE$HTTP$ADMIN, AURORA$JIS$UTILITY$,AURORA$ORB$UNAUTHENTICATED, DBMS_PRIVILEGE_CAPTURE,CSMIG,MGDSYS,SDE,DBSFWUSER
Following your Oracle installation, you may have several other system roles defined. To append these users to the schema exclusion list, set the
SYSUSERS
configuration directive to a comma-separated list of system users to exclude. For example:SYSUSERS INTERNAL,SYSDBA,BI,HR,IX,OE,PM,SH
This will add users
INTERNAL
andSYSDBA
to the schema exclusion list.FORCE_OWNER
By default the owner of the database objects is the one you are using to connect to Postgres Pro using psql. If you use another user (
postgres
, for example), you can force ora2pgpro to set the object owner to be the one used in the Oracle database by setting the directive to 1, or to a completely different username by setting the directive value to that username.FORCE_SECURITY_INVOKER
ora2pgpro use the function security privileges set in Oracle, and it is often defined as
SECURITY DEFINER
. If you want to override those security privileges for all functions and useSECURITY INVOKER
instead, enable this directive.USE_TABLESPACE
When enabled, this directive forces ora2pgpro to export all tables, indexes constraints and indexes using the tablespace name defined in Oracle database. This works only with tablespaces that are not
TEMP
,USERS
, andSYSTEM
.WITH_OID
Activating this directive will force ora2pgpro to add
WITH OIDS
when creating tables or views as tables. Default is the same as in Postgres Pro, disabled.NO_FUNCTION_METADATA
Force ora2pgpro to not look for function declaration. Note that this will prevent ora2pgpro to rewrite function replacement call if needed. Do not enable it unless looking forward at function breaks other export.
The export action is performed following a single configuration directive TYPE
, some others add more control on what should be really exported.
TYPE
Here are the different values of the
TYPE
directive, default isTABLE
:TABLE
: Extract all tables with indexes, primary keys, unique keys, foreign keys, and check constraints.VIEW
: Extract only views.GRANT
: Extract roles converted to Postgres Pro groups, users, and grants on all objects.SEQUENCE
: Extract all sequences and their last positions.TABLESPACE
: Extract storage spaces for tables and indexes.TRIGGER
: Extract triggers defined following actions.FUNCTION
: Extract functions.PROCEDURE
: Extract procedures.PACKAGE
: Extract packages and package bodies.INSERT
: Extract data as INSERT statement.COPY
: Extract data as COPY statement.PARTITION
: Extract range and list Oracle partitions with subpartitions.TYPE
: Extract user-defined Oracle type.FDW
: Export Oracle tables as foreign tables for oracle_fdw.MVIEW
: Export materialized views.QUERY
: Try to automatically convert Oracle SQL queries.DBLINK
: Generate Oracle foreign data wrapper server to use asdblink
.SYNONYM
: Export Oracle synonyms as views on other schema's objects.DIRECTORY
: Export Oracle directories asexternal_file
extension objects.LOAD
: Dispatch a list of queries over multiple Postgres Pro connections.TEST
: Perform a diff between Oracle and Postgres Pro database.TEST_COUNT
: Perform a row count diff between Oracle and Postgres Pro table.TEST_VIEW
: Perform a count on both sides of number of rows returned by views.TEST_DATA
: Perform data validation check on rows on both sides.SHOW_VERSION
: Display Oracle version.SHOW_SCHEMA
: Display the list of schemas available in the database.SHOW_TABLE
: Display the list of tables available.SHOW_COLUMN
: Display the list of tables columns available and the ora2pgpro conversion type from Oracle to Postgres Pro that will be applied. It will also warn you if there are Postgres Pro reserved words in Oracle object names.SHOW_REPORT
: Show a detailed report of the Oracle database content to evaluate the content of the database to migrate, in terms of objects and cost to end the migration.
Only one type of export can be performed at the same time so the
TYPE
directive must be unique. If you have more than one, only the last found in the file will be registered.Some export type can not or should not be loaded directly into the Postgres Pro database and still require little manual editing. This is the case for
GRANT
,TABLESPACE
,TRIGGER
,FUNCTION
,PROCEDURE
,TYPE
,QUERY
, andPACKAGE
export types, especially if you have PL/SQL code or Oracle-specific SQL in it.For
TABLESPACE
, you must ensure that the file path exists in the system and forSYNONYM
, ensure that the object's owners and schemas correspond to the new Postgres Pro database design.Note that you can chain multiple export by giving to the
TYPE
directive a comma-separated list of export type, but in this case you must not useCOPY
orINSERT
with other export type.ora2pgpro will convert Oracle partition using table inheritance, trigger, and functions. For more information, see Table Partitioning.
The
TYPE
export allows export of user-defined Oracle types. If you do not use the--plsql
command-line parameter, it dumps Oracle user type as-is, else ora2pgpro will try to convert it to Postgres Pro syntax.Here is an example of the
SHOW_COLUMN
output:[2] TABLE CURRENT_SCHEMA (1 rows) (Warning: 'CURRENT_SCHEMA' is a reserved word in PostgreSQL) CONSTRAINT : NUMBER(22) => bigint (Warning: 'CONSTRAINT' is a reserved word in PostgreSQL) FREEZE : VARCHAR2(25) => varchar(25) (Warning: 'FREEZE' is a reserved word in PostgreSQL) ... [6] TABLE LOCATIONS (23 rows) LOCATION_ID : NUMBER(4) => smallint STREET_ADDRESS : VARCHAR2(40) => varchar(40) POSTAL_CODE : VARCHAR2(12) => varchar(12) CITY : VARCHAR2(30) => varchar(30) STATE_PROVINCE : VARCHAR2(25) => varchar(25) COUNTRY_ID : CHAR(2) => char(2)
Those extraction keywords are used only to display the requested information and exit. This allows you to quickly know on what you are going to work with.
The
SHOW_COLUMN
allows another ora2pgpro command-line option:--allow relname
or-a relname
to limit the displayed information to the given table.The
SHOW_ENCODING
export type will display theNLS_LANG
andCLIENT_ENCODING
values that ora2pgpro will use, and the real encoding of the Oracle database with the corresponding client encoding that could be used with Postgres Pro.ora2pgpro allows you to export your Oracle table definition to be used with the oracle_fdw foreign data wrapper. By using type
FDW
, your Oracle tables will be exported as follows:CREATE FOREIGN TABLE oratab ( id integer NOT NULL, text character varying(30), floating double precision NOT NULL ) SERVER oradb OPTIONS (table 'ORATAB');
Now you can use the table like a regular Postgres Pro table.
There is also a more advanced report with migration cost, see the section called “Migration Cost Assessment”.
ESTIMATE_COST
Activate the migration cost evaluation. Must only be used with
SHOW_REPORT
,FUNCTION
,PROCEDURE
,PACKAGE
, andQUERY
export type. Default is disabled. You may want to use the--estimate_cost
command-line option instead to activate this functionality. Note that enabling this directive will forcePLSQL_PGSQL
activation.COST_UNIT_VALUE
Set the value in minutes of the migration cost evaluation unit. Default is five minutes per unit. See
--cost_unit_value
to change the unit value in the command line.DUMP_AS_HTML
By default, when using
SHOW_REPORT
, the migration report is generated as simple text, enabling this directive will force ora2pgpro to create a report in HTML format.HUMAN_DAYS_LIMIT
Use this directive to redefine the number of man-days limit where the migration assessment level must switch from B to C. Default is set to 10 man-days.
JOBS
This configuration directive adds multiprocess support to
COPY
,FUNCTION
, andPROCEDURE
export type, the value is the number of processes to use. By default multiprocess is disabled.This directive is used to set the number of cores to be used to parallelize data import into Postgres Pro. During
FUNCTION
orPROCEDURE
export type each function will be translated to PL/pgSQL using a new process, the performances gain can be very important when you have many functions to convert.There is no limitation in parallel processing other than the number of cores and the Postgres Pro I/O performance capabilities.
Doesn't work under Windows Operating System, it is simply disabled.
ORACLE_COPIES
This configuration directive adds multiprocess support to extract data from Oracle. The value is the number of processes to use to parallelize the select query. By default parallel query is disabled.
The parallelism is built on splitting the query following of the number of cores given as value to
ORACLE_COPIES
as follows:SELECT * FROM MYTABLE WHERE ABS(MOD(COLUMN, ORACLE_COPIES)) = CUR_PROC
Here
COLUMN
is a technical key like a primary or unique key where split will be based and the current core used by the query (CUR_PROC
). You can also force the column name to use with theDEFINED_PK
configuration directive.Doesn't work under Windows Operating System, it is simply disabled.
DEFINED_PK
This directive is used to define the technical key to be used to split the query between number of cores set with the
ORACLE_COPIES
variable. For example:DEFINED_PK EMPLOYEES:employee_id
The parallel query that will be used supposing that
-J
orORACLE_COPIES
is set to 8:SELECT * FROM EMPLOYEES WHERE ABS(MOD(employee_id, 8)) = N
Here N is the current process forked starting from 0.
PARALLEL_TABLES
This directive is used to define the number of tables that will be processed in parallel for data extraction. The limit is the number of cores on your machine. ora2pgpro will open one database connection for each parallel table extraction. This directive, when more than 1, will invalidate
ORACLE_COPIES
but notJOBS
, so the real number of process that will be used isPARALLEL_TABLES
*JOBS
.Note that this directive when set more that 1 will also automatically enable the
FILE_PER_TABLE
directive if you are exporting to files. This is used to export tables and views in separate files.Use
PARALLEL_TABLES
to use parallelism withCOPY
,INSERT
, andTEST_DATA
actions. It is also useful withTEST
,TEST_COUNT
, andSHOW_TABLE
if--count_rows
is used for real row count.DEFAULT_PARALLELISM_DEGREE
You can force ora2pgpro to use
/*+ PARALLEL(tbname, degree) */
hint in each query used to export data from Oracle by setting a value more than 1 to this directive. A value of 0 or 1 disables the use of the parallel hint. Default is disabled.FDW_SERVER
This directive is used to set the name of the foreign data server that is used in the CREATE SERVER name FOREIGN DATA WRAPPER oracle_fdw command. This name will then be used in the CREATE FOREIGN TABLE commands and to import data using oracle_fdw. By default no foreign server is defined. This only concerns export types
FDW
,COPY
, andINSERT
. For export typeFDW
, the default value isorcl
.FDW_IMPORT_SCHEMA
Schema where foreign tables for data migration will be created. If you use several instances of ora2pgpro for data migration through the foreign data wrapper, you might need to change the name of the schema for each instance. Default:
ora2pg_fdw_import
.DROP_FOREIGN_SCHEMA
By default ora2pgpro drops the temporary schema
ora2pg_fdw_import
used to import the Oracle foreign schema before each new import. If you want to preserve the existing schema because of modifications or the use of a third-party server, disable this directive.EXTERNAL_TO_FDW
This directive, enabled by default, allows to export Oracle external tables as file_fdw foreign tables. To not export these tables at all, set the directive to 0.
INTERNAL_DATE_MAX
Internal timestamps retrieved from custom type are extracted in the following format:
01-JAN-77 12.00.00.000000 AM
. It is impossible to know the exact century that must be used, so by default any year below 49 will be added to 2000 and others to 1900. You can use this directive to change the default value 49. This is only relevant if you have a user-defined type with a columntimestamp
.AUDIT_USER
Set the comma-separated list of usernames that must be used to filter queries from the
DBA_AUDIT_TRAIL
table. Default is to not scan this table and to never look for queries. This parameter is used only withSHOW_REPORT
andQUERY
export types with no input file for queries. Note that queries will be normalized before output unlike when a file is given at input using the-i
option.FUNCTION_CHECK
Disable this directive if you want to disable
check_function_bodies
.SET check_function_bodies = false;
It disables validation of the function body string during CREATE FUNCTION. Default is to use the
postgresql.conf
setting that enables it by default.ENABLE_BLOB_EXPORT
Exporting BLOB takes time, in some circumstances you may want to export all data except the BLOB columns. In this case disable this directive and the BLOB columns will not be included into data export. Take care that the target bytea column do not have a
NOT NULL
constraint.DATA_EXPORT_ORDER
By default data export order will be done by sorting on table names. If you have huge tables at the end of alphabetic order and you are using multiprocess, it can be better to set the sort order on size so that multiple small tables can be processed before the largest tables finish. In this case set this directive to size. Possible values are
name
andsize
. Note that export typeSHOW_TABLE
andSHOW_COLUMN
will use this sort order too, not onlyCOPY
orINSERT
export type.
You may want to export only a part of an Oracle database, here is a set of configuration directives that will allow you to control what parts of the database should be exported.
ALLOW
This directive allows you to set a list of objects on which the export must be limited, excluding all other objects in the same type of export. The value is a space or comma-separated list of objects names to export. You can include valid regex into the list. For example:
ALLOW EMPLOYEES SALE_.* COUNTRIES .*_GEOM_SEQ
This will export objects with name
EMPLOYEES
,COUNTRIES
, all objects beginning withSALE_
, and all objects with a name ending by_GEOM_SEQ
. The object depends on the export type. Note that regex will not work with 8i database, you must use the%
placeholder instead, ora2pgpro will use theLIKE
operator.This is the manner to declare global filters that will be used with the current export type. You can also use extended filters that will be applied to specific objects or only on their related export type. For example:
ora2pgpro -p -c ora2pgpro.conf -t TRIGGER -a 'TABLE[employees]'
This will limit the export of triggers to those defined on table
employees
. If you want to extract all triggers but not someINSTEAD OF
triggers:ora2pgpro -c ora2pgpro.conf -t TRIGGER -e 'VIEW[trg_view_.*]'
Or a more complex form:
ora2pgpro -p -c ora2pgpro.conf -t TABLE -a 'TABLE[EMPLOYEES]' \ -e 'INDEX[emp_.*];CKEY[emp_salary_min]'
This command will export the definition of the
employees
table but will exclude all index beginning withemp_
and theCHECK
constraint calledemp_salary_min
.When exporting partition, you can exclude some partition tables by using the following command:
ora2pgpro -p -c ora2pgpro.conf -t PARTITION -e 'PARTITION[PART_199.* PART_198.*]'
This will exclude partitioned tables for years 1980 to 1999 from the export but not the main partition table. The trigger will also be adapted to exclude those tables.
With
GRANT
export, you can use this extended form to exclude some users from the export, or limit the export to some others:ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'USER1 USER2' or ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'GRANT[USER1 USER2]'
The latter will limit export grants to users
USER1
andUSER2
. But if you do not want to export grants on some functions for these users, for example:ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'USER1 USER2' -e 'FUNCTION[adm_.*];PROCEDURE[adm_.*]'
Oracle does not allow the use of look-ahead expression so you may want to exclude some objects that match the
ALLOW
regexp you have defined. For example, if you want to export all table starting withE
but not those starting withEXP
, it is not possible to do that in a single expression. This is why you can start a regular expression with the!
character to exclude object matching the regexp given just after. The previous example can be written as follows:ALLOW E.* !EXP.*
It will be translated into the following in the object search expression:
REGEXP_LIKE(..., '^E.*$') AND NOT REGEXP_LIKE(..., '^EXP.*$')
EXCLUDE
This directive is the opposite of the previous one, it allows you to define a space or comma-separated list of object name to exclude from the export. You can include a valid regular expression into the list. For example:
EXCLUDE EMPLOYEES TMP_.* COUNTRIES
This will exclude objects with names
EMPLOYEES
,COUNTRIES
, and all tables beginning withtmp_
.For example, you can ban from export unwanted functions with this directive:
EXCLUDE write_to_.* send_mail_.*
This example will exclude all functions, procedures, or functions in a package with the name beginning with those regex. Note that regex will not work with 8i database, you must use the
%
placeholder instead, ora2pgpro will use theNOT LIKE
operator. See above (directiveALLOW
) for the extended syntax.NO_EXCLUDED_TABLE
By default ora2pgpro excludes from export some Oracle “garbage” tables that should never be part of an export. This behavior generates a lot of
REGEXP_LIKE
expressions which are slowing down the export when looking at tables. To disable this behavior, enable this directive, but you will have to exclude or clean up later by yourself the unwanted tables. The regexp used to exclude the table are defined in the array@EXCLUDED_TABLES
inlib/Ora2Pgpro.pm
. Note that this behavior is independent to theEXCLUDE
configuration directive.VIEW_AS_TABLE
Set which view to export as a table. By default none. The value must be a list of view names or regexp separated by space or comma. If the object name is a view and the export type is
TABLE
, the view will be exported as a CREATE TABLE statement. If export type isCOPY
orINSERT
, the corresponding data will be exported. See Exporting Views as Postgres Pro Tables for more details.MVIEW_AS_TABLE
Set which materialized view to export as a table. By default none. Value must be a list of materialized view names or regexp separated by space or comma. If the object name is a materialized view and the export type is
TABLE
, the view will be exported as a CREATE TABLE statement. If export type isCOPY
orINSERT
, the corresponding data will be exported.NO_VIEW_ORDERING
By default ora2pgpro tries to order views to avoid error at the import time with nested views. With a huge number of views, this can take a very long time, you can bypass this ordering by enabling this directive.
GRANT_OBJECT
When exporting grants, you can specify a comma-separated list of objects for which privileges will be exported. Default is export for all objects. Here are the possibles values
TABLE
,VIEW
,MATERIALIZED VIEW
,SEQUENCE
,PROCEDURE
,FUNCTION
,PACKAGE BODY
,TYPE
,SYNONYM
,DIRECTORY
. Only one object type is allowed at a time. For example, set it toTABLE
if you just want to export privileges on tables. You can use the-g
option to overwrite it.WHERE
This directive allows you to specify a
WHERE
clause filter when dumping the contents of tables. Value constructs as follows:TABLE_NAME[WHERE_CLAUSE]
, or if you have only one where clause for each table just put the where clause as the value. Both are possible too. Here are some examples:# Global where clause applying to all tables included in the export WHERE 1=1 # Apply the where clause only on table TABLE_NAME WHERE TABLE_NAME[ID1='001'] # Applies two different clause on tables TABLE_NAME and OTHER_TABLE # and a generic where clause on DATE_CREATE to all other tables WHERE TABLE_NAME[ID1='001' OR ID1='002] DATE_CREATE > '2001-01-01' OTHER_TABLE[NAME='test']
Any where clause not included into a table name bracket clause will be applied to all exported table including the tables defined in the
WHERE
clause. TheseWHERE
clauses are very useful if you want to archive some data or to the opposite only export some recent data.To be able to test data import quickly, it is useful to limit data export to the first thousand tuples of each table. For Oracle, define the following clause:
WHERE ROWNUM < 1000
This can also be restricted to some tables data export.
The command-line option
-W
or--where
will override this directive for the global part and per table if the table names are the same.TOP_MAX
This directive is used to limit the number of items shown in the top N lists like the top list of tables per number of rows and the top list of largest tables in megabytes. By default it is set to 10 items.
LOG_ON_ERROR
Enable this directive if you want to continue direct data import on error. When ora2pgpro receives an error in the COPY or INSERT statement from Postgres Pro, it will log the statement to a file called
TABLENAME_error.log
in the output directory and continue to the next bulk of data. Like this you can try to fix the statement and manually reload the error log file. Default is disabled: abort import on error.REPLACE_QUERY
Sometimes you may want to extract data from an Oracle table but you need a custom query for that. Not just a SELECT * FROM table like ora2pgpro does but a more complex query. This directive allows you to overwrite the query used by ora2pgpro to extract data. The format is
TABLENAME[SQL_QUERY]
. If you have multiple table to extract by replacing the ora2pgpro query, you can define multipleREPLACE_QUERY
lines.REPLACE_QUERY EMPLOYEES[SELECT e.id,e.fisrtname,lastname FROM EMPLOYEES e JOIN EMP_UPDT u ON (e.id=u.id AND u.cdate>'2014-08-01 00:00:00')]
Several directives can be used to control the way ora2pgpro will export the Oracle text search indexes. By default CONTEXT
indexes will be exported to Postgres Pro FTS
indexes but CTXCAT
indexes will be exported as indexes using the pg_trgm extension.
CONTEXT_AS_TRGM
Force ora2pgpro to translate Oracle text indexes into Postgres Pro indexes using the pg_trgm extension. Default is to translate
CONTEXT
indexes intoFTS
indexes andCTXCAT
indexes using pg_trgm. Most of the time using pg_trgm is enough, this is what this directive is for. You need to create the pg_trgm extension into the destination database before importing the objects.FTS_INDEX_ONLY
By default, ora2pgpro creates a function-based index to translate Oracle text indexes.
CREATE INDEX ON t_document USING gin(to_tsvector('pg_catalog.french', title));
You will have to rewrite the
CONTAIN()
clause usingto_tsvector()
, for example:SELECT id,title FROM t_document WHERE to_tsvector(title) @@ to_tsquery('search_word');
To force ora2pgpro to create an extra tsvector column with dedicated triggers for
FTS
indexes, disable this directive. In this case, ora2pgpro will add the column as follows:ALTER TABLE t_document ADD COLUMN tsv_title tsvector;
Then update the column to compute
FTS
vectors if the data have been loaded before UPDATE t_document SET tsv_title = to_tsvector('pg_catalog.french', coalesce(title,''));. To automatically update the column when a modification in the title column appears, ora2pgpro adds the following trigger:CREATE FUNCTION tsv_t_document_title() RETURNS trigger AS $$ BEGIN IF TG_OP = 'INSERT' OR new.title != old.title THEN new.tsv_title := to_tsvector('pg_catalog.french', coalesce(new.title,'')); END IF; return new; END $$ LANGUAGE plpgsql; CREATE TRIGGER trig_tsv_t_document_title BEFORE INSERT OR UPDATE ON t_document FOR EACH ROW EXECUTE PROCEDURE tsv_t_document_title();
When the Oracle text index is defined over multiple columns, ora2pgpro will use
setweight()
to set a weight in the order of the column declaration.FTS_CONFIG
Use this directive to force text search configuration to use. When it is not set, ora2pgpro will autodetect the stemmer used by Oracle for each index and
pg_catalog.english
if the information is not found.USE_UNACCENT
If you want to perform your text search in an accent-insensitive way, enable this directive. ora2pgpro will create a helper function over
unaccent()
and the pg_trgm indexes using this function. With FTS, ora2pgpro will redefine your text search configuration, for example:CREATE TEXT SEARCH CONFIGURATION fr (COPY = french); ALTER TEXT SEARCH CONFIGURATION fr ALTER MAPPING FOR hword, hword_part, word WITH unaccent, french_stem;
Then set the
FTS_CONFIG
ora2pgpro.conf
directive tofr
instead ofpg_catalog.english
.When enabled, ora2pgpro will create the wrapper function:
CREATE OR REPLACE FUNCTION unaccent_immutable(text) RETURNS text AS $$ SELECT public.unaccent('public.unaccent', $1); $$ LANGUAGE sql IMMUTABLE COST 1;
The indexes are exported as follows:
CREATE INDEX t_document_title_unaccent_trgm_idx ON t_document USING gin (unaccent_immutable(title) gin_trgm_ops);
In your queries, you will need to use the same function in the search to be able to use the function-based index. Example:
SELECT * FROM t_document WHERE unaccent_immutable(title) LIKE '%donnees%';
USE_LOWER_UNACCENT
Same as above but call
lower()
in theunaccent_immutable()
function:CREATE OR REPLACE FUNCTION unaccent_immutable(text) RETURNS text AS $$ SELECT lower(public.unaccent('public.unaccent', $1)); $$ LANGUAGE sql IMMUTABLE;
One of the main advantages of ora2pgpro is its flexibility to replicate Oracle database into Postgres Pro database with a different structure or schema. There are configuration directives that allow you to map those differences.
REORDERING_COLUMNS
Enable this directive to reorder columns and minimize the footprint on disc, so that more rows fit on a data page, which is the most important factor for speed. Default is
disabled
, which means that the same order as in Oracle tables definition is used, that should be enough for most usages. This directive is only used withTABLE
export.MODIFY_STRUCT
This directive allows you to limit the columns extracted for a given table. The value consists of a space-separated list of table names with a set of columns in parenthesis as follows:
MODIFY_STRUCT NOM_TABLE(nomcol1,nomcol2,...) ...
. For example:MODIFY_STRUCT T_TEST1(id,dossier) T_TEST2(id,fichier)
This will only extract the columns
id
anddossier
from the tableT_TEST1
and columnsid
andfichier
from the tableT_TEST2
. This directive can only be used withTABLE
,COPY
, orINSERT
export. WithTABLE
export, the CREATE TABLE DDL statement will respect the new list of columns, and all indexes or foreign keys pointing to or from a column removed will not be exported.EXCLUDE_COLUMNS
Instead of redefining the table structure with
MODIFY_STRUCT
, you may want to exclude some columns from the table export. The value consists of a space-separated list of table names with a set of columns in parenthesis as follows:EXCLUDE_COLUMNS NOM_TABLE(nomcol1,nomcol2,...) ...
. For example:EXCLUDE_COLUMNS T_TEST1(id,dossier) T_TEST2(id,fichier)
This will exclude from the export the columns
id
anddossier
from the tableT_TEST1
and columnsid
andfichier
from the tableT_TEST2
. This directive can only be used withTABLE
,COPY
, orINSERT
export. WithTABLE
export, the CREATE TABLE DDL statement will respect the new list of columns, and all indexes or foreign key pointing to or from a column removed will not be exported.REPLACE_TABLES
This directive allows you to remap a list of Oracle table names to Postgres Pro table names during export. The value is a list of space-separated values with the following structure:
REPLACE_TABLES ORIG_TBNAME1:DEST_TBNAME1 ORIG_TBNAME2:DEST_TBNAME2
Oracle tables
ORIG_TBNAME1
andORIG_TBNAME2
will be respectively renamed toDEST_TBNAME1
andDEST_TBNAME2
.REPLACE_COLS
Like table names, the names of the columns can be remapped to different ones using the following syntax:
REPLACE_COLS ORIG_TBNAME(ORIG_COLNAME1:NEW_COLNAME1,ORIG_COLNAME2:NEW_COLNAME2)
. For example:REPLACE_COLS T_TEST(dico:dictionary,dossier:folder)
This renames the Oracle columns
dico
anddossier
from tableT_TEST
todictionary
andfolder
.REPLACE_AS_BOOLEAN
If you want to change the type of some Oracle columns to Postgres Pro boolean during the export, you can define here a list of tables and columns separated by space as follows:
REPLACE_AS_BOOLEAN TB_NAME1:COL_NAME1 TB_NAME1:COL_NAME2 TB_NAME2:COL_NAME2
The values set in the boolean columns list will be replaced with the
t
andf
following the default replacement values and those additionally set in directiveBOOLEAN_VALUES
.Note that if you have modified the table name with
REPLACE_TABLES
and/or the column name, you need to use the name of the original table and/or column.REPLACE_COLS TB_NAME1(OLD_COL_NAME1:NEW_COL_NAME1) REPLACE_AS_BOOLEAN TB_NAME1:OLD_COL_NAME1
You can also give a type and precision to convert all fields of that type as a boolean automatically. For example:
REPLACE_AS_BOOLEAN NUMBER:1 CHAR:1 TB_NAME1:COL_NAME1 TB_NAME1:COL_NAME2
This will also replace any field of type number(1) or char(1) as a boolean in all exported tables.
BOOLEAN_VALUES
Use this to add additional definition of the possible boolean values used in Oracle fields. You must set a space-separated list of
TRUE:FALSE
values. By default here are the values recognized by ora2pgpro:BOOLEAN_VALUES yes:no y:n 1:0 true:false enabled:disabled
Any values defined here will be added to the default list.
REPLACE_ZERO_DATE
When ora2pgpro finds a “zero” date
0000-00-00 00:00:00
, it is replaced by NULL. This could be a problem if your column is defined with theNOT NULL
constraint. If you can not remove the constraint, use this directive to set an arbitral date that will be used instead. You can also use-INFINITY
if you do not want to use a fake date.INDEXES_SUFFIX
Add the given value as suffix to index names. Useful, if you have indexes with same name as tables. For example:
INDEXES_SUFFIX _idx
This will add
_idx
at the end of all index names. Not so common but can help.INDEXES_RENAMING
Enable this directive to rename all indexes in the following format:
tablename_columns_names
. Could be very useful for databases that have the same index name multiple times or that use the same name as a table, which is not allowed by Postgres Pro. Disabled by default.USE_INDEX_OPCLASS
Operator classes
text_pattern_ops
,varchar_pattern_ops
, andbpchar_pattern_ops
support B-tree indexes on the corresponding types. The difference from the default operator classes is that the values are compared strictly character by character rather than according to the locale-specific collation rules. This makes these operator classes suitable for use by queries involving pattern-matching expressions (LIKE or POSIX regular expressions) when the database does not use the standardC
locale. If you enable, with value 1, this will force ora2pgpro to export all indexes defined on varchar2() and char() columns using those operators. If you set it to a value greater than 1, it will only change indexes on columns where the character limit is greater or equal than this value. For example, set it to 128 to create these kind of indexes on columns of type varchar2(N) where N >= 128.RENAME_PARTITION
Enable this directive if you want that your partition tables will be renamed. Disabled by default. If you have multiple partitioned tables, when exported to Postgres Pro some partitions could have the same name but different parent tables. This is not allowed, a table name must be unique, in this case enable this directive. The following rules are applied by default:
- Partition: "tablename"_part"pos" where "pos" is the partition number.
- Subpartition: "tablename"_part"pos"_subpart"pos".
- Partition/subpartition: "tablename"_part_default "tablename"_part"pos"_subpart_default.
DISABLE_PARTITION
If you do not want to reproduce the partitioning like in Oracle and want to export all partitioned Oracle data into the main single table in Postgres Pro, enable this directive. ora2pgpro will export all data into the main table. Default is to use partitioning, ora2pgpro will export data from each partition and import them into the Postgres Pro dedicated partition table.
DISABLE_UNLOGGED
By default ora2pgpro exports Oracle tables with the
NOLOGGING
attribute asUNLOGGED
tables. You may want to fully disable this feature because you will lose all data from unlogged tables in case of a Postgres Pro crash. Set it to 1 to export all tables as normal tables.