]> granicus.if.org Git - postgresql/commitdiff
Update to my2pg version 1.28, add docs, update URL for newest version.
authorBruce Momjian <bruce@momjian.us>
Mon, 19 Apr 2004 23:18:12 +0000 (23:18 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 19 Apr 2004 23:18:12 +0000 (23:18 +0000)
Create diff of custom changes Tom made to the utility for CREATE
FUNCTION.

This will make moving this utility out of CVS easier.

contrib/mysql/README
contrib/mysql/my2pg.diff [new file with mode: 0644]
contrib/mysql/my2pg.html [new file with mode: 0755]
contrib/mysql/my2pg.pl

index 5511df6c6789ac6e8f7793187383136fa44e86b1..953e204d4227e8e81e101f6a6271f7fe208a3f69 100644 (file)
@@ -2,7 +2,7 @@ Here are two conversion utilities for MySQL dumps.  Use the one you prefer.
 
 The most recent version of my2pg.pl can be obtained from:
 
-       http://ziet.zhitomir.ua/~fonin/code/
+       http://www.omnistarinc.com/~fonin/downloads.php#my2pg
 
 Another tool, mysql2pgsql,  can be found at:
 
diff --git a/contrib/mysql/my2pg.diff b/contrib/mysql/my2pg.diff
new file mode 100644 (file)
index 0000000..7c870b3
--- /dev/null
@@ -0,0 +1,112 @@
+*** /laptop/my2pg.pl   Mon Apr 19 18:51:44 2004
+--- my2pg.pl   Mon Apr 19 18:59:09 2004
+***************
+*** 38,43 ****
+--- 38,50 ----
+  # $My2pg: my2pg.pl,v 1.28 2001/12/06 19:32:20 fonin Exp $
+  # $Id: my2pg.diff,v 1.1 2004/04/19 23:18:12 momjian Exp $
+  
++ # Custom patch
++ # Revision 1.9  2002/08/22 00:01:39  tgl
++ # Add a bunch of pseudo-types to replace the behavior formerly associated
++ # with OPAQUE, as per recent pghackers discussion.  I still want to do some
++ # more work on the 'cstring' pseudo-type, but I'm going to commit the bulk
++ # of the changes now before the tree starts shifting under me ...
++ 
+  #
+  # $Log: my2pg.diff,v $
+  # Revision 1.1  2004/04/19 23:18:12  momjian
+  # Update to my2pg version 1.28, add docs, update URL for newest version.
+  #
+  # Create diff of custom changes Tom made to the utility for CREATE
+  # FUNCTION.
+  #
+  # This will make moving this utility out of CVS easier.
+  #
+  # Revision 1.28  2002/11/30 12:03:48  fonin
+***************
+*** 332,342 ****
+           print LIBTYPES "\n * Types for table ".uc($table_name);
+           print LIBTYPES "\n */\n";
+  
+!          $types.="\nCREATE FUNCTION $typename"."_in (opaque)
+       RETURNS $typename
+       AS '$libtypename'
+       LANGUAGE 'c'
+!      WITH (ISCACHABLE);\n";
+  
+  # creating output function
+           my $func_out="
+--- 339,349 ----
+           print LIBTYPES "\n * Types for table ".uc($table_name);
+           print LIBTYPES "\n */\n";
+  
+!          $types.="\nCREATE FUNCTION $typename"."_in (cstring)
+       RETURNS $typename
+       AS '$libtypename'
+       LANGUAGE 'c'
+!      WITH (ISSTRICT, ISCACHABLE);\n";
+  
+  # creating output function
+           my $func_out="
+***************
+*** 386,396 ****
+      return (*a>=*b);
+  }\n";
+  
+!          $types.="\nCREATE FUNCTION $typename"."_out (opaque)
+!      RETURNS opaque
+       AS '$libtypename'
+       LANGUAGE 'c'
+!      WITH (ISCACHABLE);\n";
+  
+           $types.="\nCREATE TYPE $typename (
+       internallength = 2,
+--- 393,403 ----
+      return (*a>=*b);
+  }\n";
+  
+!          $types.="\nCREATE FUNCTION $typename"."_out ($typename)
+!      RETURNS cstring
+       AS '$libtypename'
+       LANGUAGE 'c'
+!      WITH (ISSTRICT, ISCACHABLE);\n";
+  
+           $types.="\nCREATE TYPE $typename (
+       internallength = 2,
+***************
+*** 532,538 ****
+           print LIBTYPES "\n * Types for table ".uc($table_name);
+           print LIBTYPES "\n */\n";
+  
+!          $types.="\nCREATE FUNCTION $typename"."_in (opaque)
+       RETURNS $typename
+       AS '$libtypename'
+       LANGUAGE 'c';\n";
+--- 539,545 ----
+           print LIBTYPES "\n * Types for table ".uc($table_name);
+           print LIBTYPES "\n */\n";
+  
+!          $types.="\nCREATE FUNCTION $typename"."_in (cstring)
+       RETURNS $typename
+       AS '$libtypename'
+       LANGUAGE 'c';\n";
+***************
+*** 584,591 ****
+  
+  \n";
+  
+!          $types.="\nCREATE FUNCTION $typename"."_out (opaque)
+!      RETURNS opaque
+       AS '$libtypename'
+       LANGUAGE 'c';\n";
+  
+--- 591,598 ----
+  
+  \n";
+  
+!          $types.="\nCREATE FUNCTION $typename"."_out ($typename)
+!      RETURNS cstring
+       AS '$libtypename'
+       LANGUAGE 'c';\n";
+  
diff --git a/contrib/mysql/my2pg.html b/contrib/mysql/my2pg.html
new file mode 100755 (executable)
index 0000000..1370424
--- /dev/null
@@ -0,0 +1,193 @@
+<HTML>
+<HEAD>
+<TITLE>my2pg - MySQL -> PostgreSQL dump conversion utility.</TITLE>
+<LINK REV="made" HREF="mailto:bhcompile@daffy.perf.redhat.com">
+</HEAD>
+
+<BODY>
+
+<A NAME="__index__"></A>
+<!-- INDEX BEGIN -->
+
+<UL>
+
+       <LI><A HREF="#name">NAME</A></LI>
+       <LI><A HREF="#syntax">SYNTAX</A></LI>
+       <LI><A HREF="#overview">OVERVIEW</A></LI>
+       <LI><A HREF="#commandline options">COMMAND-LINE OPTIONS</A></LI>
+       <LI><A HREF="#side effects">SIDE EFFECTS</A></LI>
+       <LI><A HREF="#bugs">BUGS</A></LI>
+       <LI><A HREF="#authors">AUTHORS</A></LI>
+       <LI><A HREF="#credits">CREDITS</A></LI>
+       <LI><A HREF="#license">LICENSE</A></LI>
+</UL>
+<!-- INDEX END -->
+
+<HR>
+<P>
+<H1><A NAME="name">NAME</A></H1>
+<P>my2pg - MySQL -&gt; PostgreSQL dump conversion utility.</P>
+<P>
+<HR>
+<H1><A NAME="syntax">SYNTAX</A></H1>
+<PRE>
+        mysqldump db | ./my2pg.pl [-nds] &gt; pgsqldump.sql
+        vi libtypes.c
+        make
+        psql database &lt; pgsqldump.txt
+where</PRE>
+<DL>
+<DT><STRONG><A NAME="item_pgsqldump%2Esql"><EM>pgsqldump.sql</EM></A></STRONG><BR>
+<DD>
+- file suitable for loading into PostgreSQL.
+<P></P>
+<DT><STRONG><A NAME="item_libtypes%2Ec"><EM>libtypes.c</EM></A></STRONG><BR>
+<DD>
+- C source for emulated MySQL types (ENUM, SET) generated by <STRONG>my2pg</STRONG>
+<P></P></DL>
+<P>
+<HR>
+<H1><A NAME="overview">OVERVIEW</A></H1>
+<P><STRONG>my2pg</STRONG> utility attempts to convert MySQL database dump to Postgres's one.
+<STRONG>my2pg</STRONG> performs such conversions:</P>
+<UL>
+<LI><STRONG><A NAME="item_Type_conversion%2E">Type conversion.</A></STRONG><BR>
+
+It tries to find proper Postgres 
+type for each column.
+Unknown types are silently pushing to output dump;
+ENUM and SET types implemented via user types 
+(C source for such types can be found in 
+<STRONG>libtypes.c</STRONG> file);
+<P></P>
+<LI><STRONG><A NAME="item_Encloses_identifiers_into_double_quotes%2E">Encloses identifiers into double quotes.</A></STRONG><BR>
+
+All column and table 
+names should be enclosed to double-quotes to prevent 
+conflict with reserved SQL keywords;
+<P></P>
+<LI><STRONG><A NAME="item_Converting">Converting</A></STRONG><BR>
+
+AUTO_INCREMENT fields to SERIAL. Actually, creating the sequence and 
+setting default value to nextval('seq'), well, you know :)
+<P></P>
+<LI><STRONG>Converting</STRONG><BR>
+
+<CODE>KEY(field)</CODE> to CREATE INDEX i_field on table (field);
+<P></P>
+<LI><STRONG><A NAME="item_The_same">The same</A></STRONG><BR>
+
+for UNIQUE keys;
+<P></P>
+<LI><STRONG><A NAME="item_Indices">Indices</A></STRONG><BR>
+
+are creating AFTER rows insertion (to speed up the load);
+<P></P>
+<LI><STRONG><A NAME="item_Translates_%27%23%27">Translates '#'</A></STRONG><BR>
+
+MySQL comments to ANSI SQL '--'
+<P></P></UL>
+<P>It encloses dump in transaction block to prevent single errors 
+during data load.</P>
+<P>
+<HR>
+<H1><A NAME="commandline options">COMMAND-LINE OPTIONS</A></H1>
+<P>My2pg takes the following command-line options:</P>
+<DL>
+<DT><STRONG><A NAME="item_%2Dn">-n</A></STRONG><BR>
+<DD>
+Convert *CHAR DEFAULT '' NOT NULL types to *CHAR NULL.
+Postgres can't load empty '' strings in NOT NULL fields.
+<P></P>
+<DT><STRONG><A NAME="item_%2Dd">-d</A></STRONG><BR>
+<DD>
+Add double quotes around table and column names
+<P></P>
+<DT><STRONG><A NAME="item_%2Dh">-h</A></STRONG><BR>
+<DD>
+Show usage banner.
+<P></P>
+<DT><STRONG><A NAME="item_%2Ds">-s</A></STRONG><BR>
+<DD>
+Do not attempt to convert data. Currently my2pg only tries to convert
+date and time data.
+<P></P></DL>
+<P>
+<HR>
+<H1><A NAME="side effects">SIDE EFFECTS</A></H1>
+<UL>
+<LI><STRONG><A NAME="item_creates">creates</A></STRONG><BR>
+
+file <STRONG>libtypes.c</STRONG> in current directory 
+overwriting existed file without any checks;
+<P></P>
+<LI><STRONG><A NAME="item_the_same">the same</A></STRONG><BR>
+
+for Makefile.
+<P></P></UL>
+<P>
+<HR>
+<H1><A NAME="bugs">BUGS</A></H1>
+<P>Known bugs are:</P>
+<UL>
+<LI><STRONG><A NAME="item_Possible_problems_with_the_timestamp_data%2E">Possible problems with the timestamp data.</A></STRONG><BR>
+
+PostgreSQL does not accept incorrect date/time values like <STRONG>2002-00-15</STRONG>,
+while MySQL does not care about that. Currently my2pg cannot handle this
+issue. You should care yourself to convert such a data.
+<P></P>
+<LI><STRONG><A NAME="item_Use_%2Ds_option_if_your_numeric_data_are_broken_du">Use -s option if your numeric data are broken during conversion.</A></STRONG><BR>
+
+My2pg attempts to convert MySQL timestamps of the form <STRONG>yyyymmdd</STRONG> to
+<STRONG>yyyy-mm-dd</STRONG> and <STRONG>yyyymmddhhmmss</STRONG> to <STRONG>yyyy-mm-dd hh:mm:ss</STRONG>. It performs
+some heuristic checks to ensure that the month,day,hour,minutes and seconds have
+values from the correct range (0..12, 0..31, 0..23, 0..59, 0..59 respectively).
+It is still possible that your numeric values that satisfy these conditions
+will get broken.
+<P></P>
+<LI><STRONG><A NAME="item_Possible_problems_with_enclosing_identifiers_in_do">Possible problems with enclosing identifiers in double quotes.</A></STRONG><BR>
+
+All identifiers such as table and column names should be enclosed in double 
+quotes. Program can't handle upper-case identifiers, 
+like DBA. Lower-case identifiers are OK.
+<P></P>
+<LI><STRONG><A NAME="item_SET_type_emulation_is_not_full%2E_LIKE_operation_o">SET type emulation is not full. LIKE operation on</A></STRONG><BR>
+
+SETs, raw integer input values should be implemented
+<P></P>
+<LI><STRONG><A NAME="item_Makefile"><STRONG>Makefile</STRONG></A></STRONG><BR>
+
+generated during output is 
+platform-dependent and surely works only on 
+Linux/gcc (FreeBSD/gcc probably works as well - not tested)
+<P></P>
+<LI><STRONG><A NAME="item_Generated_libtypes%2Ec_contain_line">Generated <STRONG>libtypes.c</STRONG> contain line</A></STRONG><BR>
+
+<PRE>
+        #include &lt;postgres.h&gt;</PRE>
+<P>This file may be located not in standard compiler 
+include path, you need to check it before compiling.</P>
+</UL>
+<P>
+<HR>
+<H1><A NAME="authors">AUTHORS</A></H1>
+<P><STRONG>(c) 2000-2002 Maxim V. Rudensky      (<A HREF="mailto:fonin@omnistaronline.com">fonin@ziet.zhitomir.ua</A>)</STRONG> (developer, maintainer)</P>
+<P><STRONG>(c) 2000 Valentine V. Danilchuk (<A HREF="mailto:valdan@ziet.zhitomir.ua">valdan@ziet.zhitomir.ua</A>)</STRONG> (original script)</P>
+<P>
+<HR>
+<H1><A NAME="credits">CREDITS</A></H1>
+<P>Great thanks to all those people who provided feedback and make development
+of this tool easier.</P>
+<P>Jeff Waugh &lt;<A HREF="mailto:jaw@ic.net">jaw@ic.net</A>&gt;</P>
+<P>Joakim Lemström &lt;<A HREF="mailto:jocke@bytewize.com">jocke@bytewize.com</A>&gt; || &lt;<A HREF="mailto:buddyh19@hotmail.com">buddyh19@hotmail.com</A>&gt;</P>
+<P>Yunliang Yu &lt;<A HREF="mailto:yu@math.duke.edu">yu@math.duke.edu</A>&gt;</P>
+<P>Brad Hilton &lt;<A HREF="mailto:bhilton@vpop.net">bhilton@vpop.net</A>&gt;</P>
+<P>If you are not listed here please write to me.</P>
+<P>
+<HR>
+<H1><A NAME="license">LICENSE</A></H1>
+<P><STRONG>BSD</STRONG></P>
+
+</BODY>
+
+</HTML>
index b24e09d1dce0575e83c8e63a9ec6adbbd3206f98..218a6a65ce46b552a7a52e45a963f369626b7eab 100755 (executable)
 # SUCH DAMAGE.
 #
 # $My2pg: my2pg.pl,v 1.28 2001/12/06 19:32:20 fonin Exp $
-# $Id: my2pg.pl,v 1.12 2004/04/19 23:11:49 momjian Exp $
+# $Id: my2pg.pl,v 1.13 2004/04/19 23:18:12 momjian Exp $
+
+# Custom patch
+# Revision 1.9  2002/08/22 00:01:39  tgl
+# Add a bunch of pseudo-types to replace the behavior formerly associated
+# with OPAQUE, as per recent pghackers discussion.  I still want to do some
+# more work on the 'cstring' pseudo-type, but I'm going to commit the bulk
+# of the changes now before the tree starts shifting under me ...
 
 #
 # $Log: my2pg.pl,v $
+# Revision 1.13  2004/04/19 23:18:12  momjian
+# Update to my2pg version 1.28, add docs, update URL for newest version.
+#
+# Create diff of custom changes Tom made to the utility for CREATE
+# FUNCTION.
+#
+# This will make moving this utility out of CVS easier.
+#
 # Revision 1.12  2004/04/19 23:11:49  momjian
 # Update to my2pg 1.28, from:
 #
@@ -337,11 +352,11 @@ int2* $typename"."_in (char *str) {
            print LIBTYPES "\n * Types for table ".uc($table_name);
            print LIBTYPES "\n */\n";
 
-           $types.="\nCREATE FUNCTION $typename"."_in (opaque)
+           $types.="\nCREATE FUNCTION $typename"."_in (cstring)
        RETURNS $typename
        AS '$libtypename'
        LANGUAGE 'c'
-       WITH (ISCACHABLE);\n";
+       WITH (ISSTRICT, ISCACHABLE);\n";
 
 # creating output function
            my $func_out="
@@ -391,11 +406,11 @@ bool $typename"."_ge(int2* a, int2* b) {
     return (*a>=*b);
 }\n";
 
-           $types.="\nCREATE FUNCTION $typename"."_out (opaque)
-       RETURNS opaque
+           $types.="\nCREATE FUNCTION $typename"."_out ($typename)
+       RETURNS cstring
        AS '$libtypename'
        LANGUAGE 'c'
-       WITH (ISCACHABLE);\n";
+       WITH (ISSTRICT, ISCACHABLE);\n";
 
            $types.="\nCREATE TYPE $typename (
        internallength = 2,
@@ -537,7 +552,7 @@ $typesize* $typename"."_in (char *str) {
            print LIBTYPES "\n * Types for table ".uc($table_name);
            print LIBTYPES "\n */\n";
 
-           $types.="\nCREATE FUNCTION $typename"."_in (opaque)
+           $types.="\nCREATE FUNCTION $typename"."_in (cstring)
        RETURNS $typename
        AS '$libtypename'
        LANGUAGE 'c';\n";
@@ -589,8 +604,8 @@ $typesize find_in_set($typesize *a, $typesize *b) {
 
 \n";
 
-           $types.="\nCREATE FUNCTION $typename"."_out (opaque)
-       RETURNS opaque
+           $types.="\nCREATE FUNCTION $typename"."_out ($typename)
+       RETURNS cstring
        AS '$libtypename'
        LANGUAGE 'c';\n";
 
@@ -762,7 +777,7 @@ close(LIBTYPES);
 
 open(MAKE,">Makefile");
 print MAKE "#
-# My2Pg \$Revision: 1.12 $ \translated dump
+# My2Pg \$Revision: 1.13 $ \translated dump
 # Makefile
 #