What language is faster, C or PL/PgSQL?

Started by Karel Riveron Escobarabout 13 years ago7 messagesgeneral
Jump to latest
#1Karel Riveron Escobar
kescobar@estudiantes.uci.cu

Hi people,

I need to write an algorithm for processing large amounts of data. I
want to write a function on PgAdmin 3 to solve my problem. I need to
know what language should be used, C or PL/PgSQL?

Needless to say, what I need is quickly. What language is faster, C or
PL/PgSQL?

Greetings, Karel River�n
University of Informatics Science

#2Ovnicraft
ovnicraft@gmail.com
In reply to: Karel Riveron Escobar (#1)
Re: What language is faster, C or PL/PgSQL?

On Sat, Feb 2, 2013 at 10:42 AM, Karel Riverón Escobar <
kescobar@estudiantes.uci.cu> wrote:

Hi people,

I need to write an algorithm for processing large amounts of data. I want
to write a function on PgAdmin 3 to solve my problem. I need to know what
language should be used, C or PL/PgSQL?

Needless to say, what I need is quickly. What language is faster, C or
PL/PgSQL?

Hello, performance processing data is not 100% related to language, IMO is
more related with algorithm.
You need to check your algorithm and order.

Answering your question i suggest you C could be some ugly but will be
faster, in this point could be good read an opinion from any PG hacker.

Regards,

Greetings, Karel Riverón
University of Informatics Science

--
Cristian Salamea
@ovnicraft

#3Carlo Stonebanks
stonec.register@sympatico.ca
In reply to: Karel Riveron Escobar (#1)
Re: What language is faster, C or PL/PgSQL?

Here is an advantage Plpgsql has:
http://www.postgresql.org/docs/9.1/static/plpgsql-expressions.html

I guess you can offset this by creating your own prepared statements in C.
Otherwise, I can’t think of how C could be slower. I would choose C for
functions that don’t have SQL statements in them – e.g. math and string
processing.

From: pgsql-general-owner@postgresql.org
[mailto:pgsql-general-owner@postgresql.org] On Behalf Of Karel Riverón
Escobar
Sent: February 2, 2013 10:42 AM
To: pgsql-general@postgresql.org
Subject: [GENERAL] What language is faster, C or PL/PgSQL?

Hi people,

I need to write an algorithm for processing large amounts of data. I want to
write a function on PgAdmin 3 to solve my problem. I need to know what
language should be used, C or PL/PgSQL?

Needless to say, what I need is quickly. What language is faster, C or
PL/PgSQL?

Greetings, Karel Riverón
University of Informatics Science

#4Merlin Moncure
mmoncure@gmail.com
In reply to: Carlo Stonebanks (#3)
Re: What language is faster, C or PL/PgSQL?

On Sat, Feb 2, 2013 at 11:36 AM, Carlo Stonebanks
<stonec.register@sympatico.ca> wrote:

Here is an advantage Plpgsql has:
http://www.postgresql.org/docs/9.1/static/plpgsql-expressions.html

I guess you can offset this by creating your own prepared statements in C.
Otherwise, I can’t think of how C could be slower. I would choose C for
functions that don’t have SQL statements in them – e.g. math and string
processing.

For cases involving data processing (SPI calls), C can be slower
because pl/pgsql has a lot of optimizations in it that can be very
easy to miss. I don't suggest writing backend C functions at all
unless you are trying to interface with a C library to access
functionality currently not exposed in SQL.

merlin

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#5Bruce Momjian
bruce@momjian.us
In reply to: Merlin Moncure (#4)
Re: What language is faster, C or PL/PgSQL?

On Mon, Feb 4, 2013 at 08:33:02AM -0600, Merlin Moncure wrote:

On Sat, Feb 2, 2013 at 11:36 AM, Carlo Stonebanks
<stonec.register@sympatico.ca> wrote:

Here is an advantage Plpgsql has:
http://www.postgresql.org/docs/9.1/static/plpgsql-expressions.html

I guess you can offset this by creating your own prepared statements in C.
Otherwise, I can’t think of how C could be slower. I would choose C for
functions that don’t have SQL statements in them – e.g. math and string
processing.

For cases involving data processing (SPI calls), C can be slower
because pl/pgsql has a lot of optimizations in it that can be very
easy to miss. I don't suggest writing backend C functions at all
unless you are trying to interface with a C library to access
functionality currently not exposed in SQL.

How is PL/pgSQL faster than C? I thought we had optimized PL/pgSQL to
save parsed functions, but I don't see how that would help with queries,
which use SPI. Am I missing something?

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#6Carlo Stonebanks
stonec.register@sympatico.ca
In reply to: Bruce Momjian (#5)
Re: What language is faster, C or PL/PgSQL?

If a C function was a call to multiple (unprepared) SQL statements, could PL/PGSQL's prepare-once plan caching have an advantage?

-----Original Message-----
From: pgsql-general-owner@postgresql.org [mailto:pgsql-general-owner@postgresql.org] On Behalf Of Bruce Momjian
Sent: February 5, 2013 12:06 AM
To: Merlin Moncure
Cc: Carlo Stonebanks; kescobar@estudiantes.uci.cu; pgsql-general@postgresql.org
Subject: Re: [GENERAL] What language is faster, C or PL/PgSQL?

On Mon, Feb 4, 2013 at 08:33:02AM -0600, Merlin Moncure wrote:

On Sat, Feb 2, 2013 at 11:36 AM, Carlo Stonebanks
<stonec.register@sympatico.ca> wrote:

Here is an advantage Plpgsql has:
http://www.postgresql.org/docs/9.1/static/plpgsql-expressions.html

I guess you can offset this by creating your own prepared statements in C.
Otherwise, I can t think of how C could be slower. I would choose C
for functions that don t have SQL statements in them e.g. math and
string processing.

For cases involving data processing (SPI calls), C can be slower
because pl/pgsql has a lot of optimizations in it that can be very
easy to miss. I don't suggest writing backend C functions at all
unless you are trying to interface with a C library to access
functionality currently not exposed in SQL.

How is PL/pgSQL faster than C? I thought we had optimized PL/pgSQL to save parsed functions, but I don't see how that would help with queries, which use SPI. Am I missing something?

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#7Pavel Stehule
pavel.stehule@gmail.com
In reply to: Bruce Momjian (#5)
Re: What language is faster, C or PL/PgSQL?

2013/2/5 Bruce Momjian <bruce@momjian.us>:

On Mon, Feb 4, 2013 at 08:33:02AM -0600, Merlin Moncure wrote:

On Sat, Feb 2, 2013 at 11:36 AM, Carlo Stonebanks
<stonec.register@sympatico.ca> wrote:

Here is an advantage Plpgsql has:
http://www.postgresql.org/docs/9.1/static/plpgsql-expressions.html

I guess you can offset this by creating your own prepared statements in C.
Otherwise, I can’t think of how C could be slower. I would choose C for
functions that don’t have SQL statements in them – e.g. math and string
processing.

For cases involving data processing (SPI calls), C can be slower
because pl/pgsql has a lot of optimizations in it that can be very
easy to miss. I don't suggest writing backend C functions at all
unless you are trying to interface with a C library to access
functionality currently not exposed in SQL.

How is PL/pgSQL faster than C? I thought we had optimized PL/pgSQL to
save parsed functions, but I don't see how that would help with queries,
which use SPI. Am I missing something?

PL/pgSQL can be faster than badly written C functions if there are
bottle neck is in server side routines. Any well written C code will
be faster then well written PL/pgSQL - how much depends on specific
use case. If bottle neck is in IO op, then not too much - PL/pgSQL has
not any specific optimization, that cannot be used in C.

Regards

Pavel

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general