On Mon, Oct 25, 2010 at 2:12 PM, Divakar Singh <dpsmails@xxxxxxxxx> wrote: > Hello Experts, > My application uses Oracle DB, and makes use of OCI interface. > I have been able to develop similar interface using postgreSQL library. > However, I have done some tests but results for PostgreSQL have not been > encouraging for a few of them. > > My questions/scenarios are: > > 1. How does PostgreSQL perform when inserting data into an indexed (type: > btree) table? Is it true that as you add the indexes on a table, the > performance deteriorates significantly whereas Oracle does not show that > much performance decrease. I have tried almost all postgreSQL performance > tips available. I want to have very good "insert" performance (with > indexes), "select" performance is not that important at this point of time. > > 2. What are the average storage requirements of postgres compared to Oracle? > I inserted upto 1 million records. The storage requirement of postgreSQL is > almost double than that of Oracle. >u > Thanks in anticipation. I ran the following tests w/libpqtypes. While you probably wont end up using libpqtypes, it's illustrative to mention it because it's generally the easiest way to get data into postgres and by far the fastest (excluding 'COPY'). source code follows after the sig (I banged it out quite quickly, it's messy!) :-). I am not seeing your results. via libpqtypes: Inserting, begin..insert..(repeat 1000000x) commit; local workstation: 2m24s remote server: 8m8s via libpqtypes, but stacking array and unstacking on server (this could be optimized further by using local prepare): local workstation: 43s (io bound) remote server: 29s (first million) remote server: 29s (second million) create index (1.8s) remote remote server: 33s (third million, w/index) obviously insert at a time tests are network bound. throw a couple of indexes in there and you should see some degradation, but nothing too terrible. merlin libpqtypes.esilo.com ins1.c (insert at a time) #include "libpq-fe.h" #include "libpqtypes.h" #define INS_COUNT 1000000 int main() { int i; PGconn *conn = PQconnectdb("host=devdb dbname=postgres port=8071"); if(PQstatus(conn) != CONNECTION_OK) { printf("bad connection"); return -1; } PQtypesRegister(conn); PQexec(conn, "begin"); for(i=0; i<INS_COUNT; i++) { PGint4 a=i; PGtext b = "some_text"; PGtimestamp c; PGbytea d; d.len = 8; d.data = b; c.date.isbc = 0; c.date.year = 2000; c.date.mon = 0; c.date.mday = 19; c.time.hour = 10; c.time.min = 41; c.time.sec = 6; c.time.usec = 0; c.time.gmtoff = -18000; PGresult *res = PQexecf(conn, "insert into ins_test(a,b,c,d) values(%int4, %text, %timestamptz, %bytea)", a, b, &c, &d); if(!res) { printf("got %s\n", PQgeterror()); return -1; } PQclear(res); } PQexec(conn, "commit"); PQfinish(conn); } ins2.c (array stack/unstack) #include "libpq-fe.h" #include "libpqtypes.h" #define INS_COUNT 1000000 int main() { int i; PGconn *conn = PQconnectdb("host=devdb dbname=postgres port=8071"); PGresult *res; if(PQstatus(conn) != CONNECTION_OK) { printf("bad connection"); return -1; } PQtypesRegister(conn); PGregisterType type = {"ins_test", NULL, NULL}; PQregisterComposites(conn, &type, 1); PGparam *p = PQparamCreate(conn); PGarray arr; arr.param = PQparamCreate(conn); arr.ndims = 0; for(i=0; i<INS_COUNT; i++) { PGint4 a=i; PGtext b = "some_text"; PGtimestamp c; PGbytea d; PGparam *i = PQparamCreate(conn); d.len = 8; d.data = b; c.date.isbc = 0; c.date.year = 2000; c.date.mon = 0; c.date.mday = 19; c.time.hour = 10; c.time.min = 41; c.time.sec = 6; c.time.usec = 0; c.time.gmtoff = -18000; PQputf(i, "%int4 %text %timestamptz %bytea", a, b, &c, &d); PQputf(arr.param, "%ins_test", i); } if(!PQputf(p, "%ins_test[]", &arr)) { printf("putf failed: %s\n", PQgeterror()); return -1; } res = PQparamExec(conn, p, "insert into ins_test select (unnest($1)).*", 1); if(!res) { printf("got %s\n", PQgeterror()); return -1; } PQclear(res); PQfinish(conn); } -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance