PostgreSQL vs MySQL : strange results on insertion - Mailing list pgsql-general

From fpaul@netcourrier.com
Subject PostgreSQL vs MySQL : strange results on insertion
Date
Msg-id mnet1.1031228936.5812.fpaul@netcourrier.com
Whole thread Raw
Responses Re: PostgreSQL vs MySQL : strange results on insertion
Re: PostgreSQL vs MySQL : strange results on insertion
List pgsql-general
Hello,

I'm making some tests to migrate a MySQL DB to PostgreSQL DB. I realized a small program in C which does the same thing
forMySQL (C API) and PostgreSQL (libpq) : 10000 insertion in a quite simple base. 
My DB :
|-----------------|----------------------------------------------|
|                                test                           |
| id              |  auto_increment (or serial for postgreSQL)  |
| type_int        |  INT (or integer)                            |
| type_varchar    |  varchar(255)                                |
| type_int2    |  INT (or integer)                               |
| type_text       |  text                                        |
|-----------------|----------------------------------------------|

/* -------------------- MySQL code : -------------------- */
#define INSERTION "INSERT INTO test (type_int, type_varchar,type_tinyint,type_text) VALUES (%d,\'essai de chaine de
caractère\',100,\'MAJUSCULESet minuscules\'" 

int main(int argc, char **argv) {
    MYSQL mysql;
    unsigned int i;
    char mquery(1000);
    MYSQL_RES *mysql_row;

    mysql_init(&mysql);
    if (mysql_real_connect(&mysql, NULL, "user", NULL, "bd", 0, NULL, 0)) {
        for (i=0;i<=10000;i++) {
            sprintf(mquery,INSERTION,i);
            if ((mysql_query(&mysql,mquery)!=0) {
                printf("sql query error (%s) : %s\n",mquery,mysql_error(&mysql));
                mysql_close(&mysql);
                return 0;
            }
        }
        mysql_close(&mysql);
    }
    else {
        printf("sql connection error : %s\n",mysql_error(&mysql));
        return 0;
    }
    return 0;
}

/* -------------------- PostgreSQL code : -------------------- */
#define INSERTION "INSERT INTO test (type_int, type_varchar,type_tinyint,type_text) VALUES (%d,\'essai de chaine de
caractère\',100,\'MAJUSCULESet minuscules\'" 

int main(int argc, char **argv) {
    PGconn *conn;
    unsigned int i;
    char mquery(1000);
    PGresult *res;

    conn=PQconnectdb("dbname=db user=user");
    if (PQstatus(conn) == CONNECTION_OK) {
        for (i=0;i<=10000;i++) {
            sprintf(mquery,INSERTION,i);
            res=PQexec(conn,mquery);
            if (PQresultstatus(res)!= PGRES_COMMAND_OK) {
                printf("sql query error (%s) : %s\n",mquery,PQresultErrorMessage(res));
                PQclear(res);
                PQfinish(conn);
                return 0;
            }
        }
        PQclear(res);
        PQfinish(conn);
    }
    else {
        printf("sql connection error : %s\n",PQerrorMessage(conn));
        return 0;
    }
    return 0;
}

I launch these programs on my computer : Linux Debian with MySQL 3.23.51 and PostgreSQL 7.2.1 (installation by default
with'apt-get install'). 
Time to realize 10000 insertions with MySQL:
    $ time ./test__mysql

    real  0m1.500s
    user 0m0.150s
    sys   0m0.090s
(between 1 and 2 seconds)

Time to realize 10000 insertions with PostgreSQL:
    $time ./test_postgresql

    real  0m28.568s
    user 0m0.390s
    sys   0m0.270s
(between 28 and 30 seconds !!!.... )

Very strange, isn't it ? Is there something in PostgreSQL's C API that I didn't understand ? Subtleties during the
configuration? I do not want to believe that PostgreSQL is 15 times slower than MySQL ! 
Thank you for any comment, remark and correction!

Florent Paul

-------------------------------------------------------------
NetCourrier, votre bureau virtuel sur Internet : Mail, Agenda, Clubs, Toolbar...
Web/Wap : www.netcourrier.com
Téléphone/Fax : 08 92 69 00 21 (0,34 € TTC/min)
Minitel: 3615 NETCOURRIER (0,15 € TTC/min)


pgsql-general by date:

Previous
From: Timothy Seever
Date:
Subject: Copying contents of OLD/NEW in a trigger
Next
From: "Markus Wollny"
Date:
Subject: Re: Problem with restoring dump (may be tsearch-related)