Need A Suggestion
I am working on the development of a military application which uses
PostgreSQL trigger functions. I cannot (unfortunately) tell you specify use,
being as it is classified.
What I need the ability to occasionally call (execute) a .exe program object
outside of the database from within the function (either during or at the
end of the function would be acceptable), giving an explicit path and
command line parameters. It is understood that in doing such the call will
need to be brief in order to avoid slowing up PostgreSQL in any way. Can
anybody make a suggestion as to how to do that, or inform me if there is a
way to do thisa lready?
I have already consulted to other mailing lists for help, with no results. I
am a Windows 2003 user, version 8.0.1
In the past, I've just written a C-based function that calls out to system.
2005/10/10, Lane Van Ingen <lvaningen@esncc.com>:
I am working on the development of a military application which uses
PostgreSQL trigger functions. I cannot (unfortunately) tell you specify use,
being as it is classified.What I need the ability to occasionally call (execute) a .exe program object
outside of the database from within the function (either during or at the
end of the function would be acceptable), giving an explicit path and
command line parameters. It is understood that in doing such the call will
need to be brief in order to avoid slowing up PostgreSQL in any way. Can
anybody make a suggestion as to how to do that, or inform me if there is a
way to do thisa lready?I have already consulted to other mailing lists for help, with no results. I
am a Windows 2003 user, version 8.0.1---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster
--
Respectfully,
Jonah H. Harris, Database Internals Architect
EnterpriseDB Corporation
http://www.enterprisedb.com/
That sounds good, and about what I expected. I am not a C programmer, but
have
access to others who are. Where would I need to put the C function in order
to
have PostgreSQL find it? Any special considerations other than putting it in
'the right library' ??
-----Original Message-----
From: Jonah H. Harris [mailto:jonah.harris@gmail.com]
Sent: Monday, October 10, 2005 3:49 PM
To: Lane Van Ingen
Cc: pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] Need A Suggestion
In the past, I've just written a C-based function that calls out to system.
2005/10/10, Lane Van Ingen <lvaningen@esncc.com>:
I am working on the development of a military application which uses
PostgreSQL trigger functions. I cannot (unfortunately) tell you specify
use,
being as it is classified.
What I need the ability to occasionally call (execute) a .exe program
object
outside of the database from within the function (either during or at the
end of the function would be acceptable), giving an explicit path and
command line parameters. It is understood that in doing such the call will
need to be brief in order to avoid slowing up PostgreSQL in any way. Can
anybody make a suggestion as to how to do that, or inform me if there is a
way to do thisa lready?I have already consulted to other mailing lists for help, with no results.
I
am a Windows 2003 user, version 8.0.1
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster
--
Respectfully,
Jonah H. Harris, Database Internals Architect
EnterpriseDB Corporation
http://www.enterprisedb.com/
-----Original Message-----
From: pgsql-hackers-owner@postgresql.org [mailto:pgsql-hackers-
owner@postgresql.org] On Behalf Of Lane Van Ingen
Sent: Monday, October 10, 2005 12:41 PM
To: pgsql-hackers@postgresql.org
Subject: [HACKERS] Need A SuggestionI am working on the development of a military application which uses
PostgreSQL trigger functions. I cannot (unfortunately) tell you
specify
use,
being as it is classified.What I need the ability to occasionally call (execute) a .exe program
object
outside of the database from within the function (either during or at
the
end of the function would be acceptable), giving an explicit path and
command line parameters. It is understood that in doing such the call
will
need to be brief in order to avoid slowing up PostgreSQL in any way.
Can
anybody make a suggestion as to how to do that, or inform me if there
is a
way to do thisa lready?
This is vague. Perhaps what you want to accomplish is best accomplished
by creation of a function from the source code.
You could also create a generic function that takes a string parameter
and then does a system call based upon that string.
If you need asynchronous operation look at exec.c
I have already consulted to other mailing lists for help, with no
results.
I
am a Windows 2003 user, version 8.0.1---------------------------(end of
broadcast)---------------------------
Show quoted text
TIP 2: Don't 'kill -9' the postmaster
Import Notes
Resolved by subject fallback
Another possibility is to use an untrusted interpreted PL such as
plperlu. That avoids the need for C. Or maybe you could prototype using
plperlu and then translate to C when it's all working. It all depends on
your needs.
cheers
andrew
Lane Van Ingen wrote:
Show quoted text
That sounds good, and about what I expected. I am not a C programmer, but
have
access to others who are. Where would I need to put the C function in order
to
have PostgreSQL find it? Any special considerations other than putting it in
'the right library' ??-----Original Message-----
From: Jonah H. Harris [mailto:jonah.harris@gmail.com]
Sent: Monday, October 10, 2005 3:49 PM
To: Lane Van Ingen
Cc: pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] Need A SuggestionIn the past, I've just written a C-based function that calls out to system.
2005/10/10, Lane Van Ingen <lvaningen@esncc.com>:
I am working on the development of a military application which uses
PostgreSQL trigger functions. I cannot (unfortunately) tell you specifyuse,
being as it is classified.
What I need the ability to occasionally call (execute) a .exe program
object
outside of the database from within the function (either during or at the
end of the function would be acceptable), giving an explicit path and
command line parameters. It is understood that in doing such the call will
need to be brief in order to avoid slowing up PostgreSQL in any way. Can
anybody make a suggestion as to how to do that, or inform me if there is a
way to do thisa lready?I have already consulted to other mailing lists for help, with no results.
I
am a Windows 2003 user, version 8.0.1
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster--
Respectfully,Jonah H. Harris, Database Internals Architect
EnterpriseDB Corporation
http://www.enterprisedb.com/---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
On Mon, Oct 10, 2005 at 03:40:43PM -0400, Lane Van Ingen wrote:
I am working on the development of a military application which uses
PostgreSQL trigger functions. I cannot (unfortunately) tell you
specify use, being as it is classified.What I need the ability to occasionally call (execute) a .exe
program object outside of the database from within the function
(either during or at the end of the function would be acceptable),
giving an explicit path and command line parameters.
You may be able to use the LISTEN/NOTIFY structure described below
instead of a trigger.
http://www.postgresql.org/docs/current/static/sql-notify.html
http://www.postgresql.org/docs/current/static/libpq-notify.html
http://blackhawk.supernews.net/listen.pl.txt
It is understood that in doing such the call will need to be brief
in order to avoid slowing up PostgreSQL in any way. Can anybody make
a suggestion as to how to do that, or inform me if there is a way to
do thisa lready?I have already consulted to other mailing lists for help, with no
results. I am a Windows 2003 user, version 8.0.1
You might want to upgrade to 8.0.4 :)
Cheers,
David.
--
David Fetter david@fetter.org http://fetter.org/
phone: +1 510 893 6100 mobile: +1 415 235 3778
Remember to vote!
"Jonah H. Harris" <jonah.harris@gmail.com> writes:
In the past, I've just written a C-based function that calls out to system.
Use pltclu, plpythonu, or plperlu, according to taste. They all have
pre-existing solutions for this.
Whether this is a good idea is another question entirely. Lots of
people will tell you it's a horrid idea for PG functions to cause
outside-the-database side effects. The reason is that if the
transaction that called the function aborts later, there is no way
to roll back what was done outside the database, and so the state
outside the database will no longer be in sync with the state inside.
regards, tom lane
On Mon, 2005-10-10 at 15:57 -0400, Lane Van Ingen wrote:
That sounds good, and about what I expected. I am not a C programmer, but
have access to others who are. Where would I need to put the C function
in order to have PostgreSQL find it? Any special considerations
other than putting it in 'the right library' ??
http://www.postgresql.org/docs/8.0/static/xfunc-c.html
-Neil
Whether this is a good idea is another question entirely. Lots of
people will tell you it's a horrid idea for PG functions to cause
outside-the-database side effects. The reason is that if the
transaction that called the function aborts later, there is no way
to roll back what was done outside the database, and so the state
outside the database will no longer be in sync with the state inside.
The new solution for this is to use an XA transaction manager and 2PC I
guess...
Chris
Whether this is a good idea is another question entirely. Lots of
people will tell you it's a horrid idea for PG functions to cause
outside-the-database side effects. The reason is that if the
transaction that called the function aborts later, there is no way
to roll back what was done outside the database, and so the state
outside the database will no longer be in sync with the state inside.
By the way - an interesting note. Since MySQL 5.0 has full support for
2PC and XA from now is the first time that MySQL and PostgreSQL can
participate in the same transaction :D
Perhaps people might start using the two databases together to harness
the power of each? :)
Chris
On E, 2005-10-10 at 16:32 -0400, Tom Lane wrote:
"Jonah H. Harris" <jonah.harris@gmail.com> writes:
In the past, I've just written a C-based function that calls out to system.
Use pltclu, plpythonu, or plperlu, according to taste. They all have
pre-existing solutions for this.Whether this is a good idea is another question entirely. Lots of
people will tell you it's a horrid idea for PG functions to cause
outside-the-database side effects. The reason is that if the
transaction that called the function aborts later, there is no way
to roll back what was done outside the database, and so the state
outside the database will no longer be in sync with the state inside.
Is there a simple, user-accessible mechanism to schedule a function to
be run at query commit ?
--
Hannu Krosing <hannu@skype.net>
Is there a simple, user-accessible mechanism to schedule a function to
be run at query commit ?
CONSTRAINT TRIGGER (DEFERRABLE)
It is kinda hack, because CONSTRAINT TRIGGERs are not indended for such use,
But there are no other "ON COMMIT" triggers in postgresql.
You can find something to run triggers on commit at
http://gorda.di.uminho.pt/community/pgsqlhooks/
It also allows to define triggers on begin, startup and shutdown.
It works fine with triggers written in C.
A patch will be available soon in order to allow to writte triggers in
other languages such as plgsql, perl, java, etc..
and also to allow triggers on [before | after] commit and [before |
after] abort.
Best regards,
Alfranio Junior