Re: newbie - postgresql or mysql

From: "Reid Thompson" <Reid(dot)Thompson(at)ateb(dot)com>
To: "Michael Fuhr" <mike(at)fuhr(dot)org>, <aly(dot)dharshi(at)telus(dot)net>
Cc: <pgsql-general(at)postgresql(dot)org>
Subject: Re: newbie - postgresql or mysql
Date: 2005-09-01 14:14:27
Message-ID: F71C0DC6B4FD3648815AAA7F969E35290194ECE3@sr002-2kexc.ateb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Michael Fuhr wrote:
> [Please copy the mailing list on replies so others can
> contribute to and learn from the discussion. Also, please
> don't top-post, as it destroys the flow of the discussion;
> I've moved your questions to a more logical place.]
>
> On Wed, Aug 31, 2005 at 03:49:57PM -0600, aly(dot)dharshi(at)telus(dot)net wrote:
>> On Wed, 31 Aug 2005, Michael Fuhr wrote:
>>> On Wed, Aug 31, 2005 at 03:17:29PM -0400, Frank wrote:
>>>>>> insert into category values
>>>>>> (4, 'Hardware - Monitor', 2, '2004-10-12 10:50:01'),
>>>>>> (5, 'Hardware - Printer', 2, '2004-10-12 10:50:02'),
>>>>>> (6, 'Hardware - Terminal', 2, '2004-10-12 10:50:02'),
>>>
>>> PostgreSQL doesn't support this form of INSERT; you'll have to use a
>>> separate INSERT per record or use COPY. Another method, although
>>> probably not useful in this case, is to insert records from a
>>> subquery; see the INSERT documentation for more information.
>>
>> Wouldn't it be simpler to do a dblink, and just get the data from
>> MySQL and drop it into PostgreSQL ? Or is this too complicated ?
>
> dblink (at least the one distributed as contrib/dblink) is
> for making connections to other PostgreSQL databases. You
> could, however, use DBI-Link or something similar to make
> connections to MySQL or another data source; in that case you
> could use the subquery form of INSERT:
>
> INSERT INTO tablename (columnlist) SELECT columnlist FROM ... ;
>
> However, if you're just doing a one-time import of data from
> MySQL, then it might be simplest to dump the data with
> separate INSERT statements (mysqldump --extended-insert=FALSE).

If you have time to play around a bit, and have Ruby, og could be
utilized...
create a test env, do a little hacking on the below ( from the og
examples dir) i.e. you'd want to remove the destroy => true, or set to
false, in the config, etc...

$ cat mysql_to_psql.rb
# = Mysql to PostgreSQL migration example.
#
# A simple example to demonstrate the flexibility of
# Og. Two connections to different databases are
# created and data is copied from a MySQL database
# to a PostgreSQL database.
#
# Og makes it easier to switch to a REAL database :)

require 'og'

# Configure databases.

psql_config = {
:destroy => true,
:name => 'test',
:store => 'psql',
:user => 'postgres',
:password => 'navelrulez'
}

mysql_config = {
:destroy => true,
:name => 'test',
:store => 'mysql',
:user => 'root',
:password => 'navelrulez'
}

# Initialize Og.

psql = Og.connect(psql_config)
mysql = Og.connect(mysql_config)

# An example managed object.
# Looks like an ordinary Ruby object.

class Article
property :name, :body, String

def initialize(name = nil, body = nil)
@name, @body = name, body
end
end

# First populate the mysql database.

mysql.manage(Article)

a1 = Article.create('name1', 'body1')
a1 = Article.create('name1', 'body1')
a1 = Article.create('name1', 'body1')

# Read all articles from Mysql.

articles = Article.all

# Switch to PostgreSQL.

psql.manage(Article)

# Store all articles.

for article in articles
article.insert
end

# Fetch an article from PostgreSQL
# as an example. Lookup by name.

article = Article.find_by_name('name1')

reid

Browse pgsql-general by date

  From Date Subject
Next Message Tan Chen Yee 2005-09-01 14:19:15 Select All Columns
Previous Message Sebastian Hennebrueder 2005-09-01 14:00:33 Exception in Query when mixing explicit join and implicit join