Thread: creating a custom server
Hi! First, sorry if this is off topic. Second, WARNING: broken english ahead :) Is it possible to create a 'custom' server which can accept normal connections from normal clients, but use different language (or just 'proxy' the queries to the real server)? A friend of mine told me this is a feature of some commercial sql server. What I acutaly want to do is to add another layer between the client and the server. For example, a client connects and issues a query like 'show sessions'. My server checks if the client has permission (according to a table in postgres) and then 'translates' the query to 'select * from sessions' or something else. The result is then sent back to the client (possibly modified). Another way to do this is to get the communication library and use it in my application... Any ideas/hints/etc will be appreciated. -- Players win and winners play Have a lucky day
Off the top of my head, I don't recall any specific 'middleware' implementations that do this exactly, but it wouldn't be entirely difficult to make one of your own. If you are familiar with Perl or Python, making a parallel processing network server is not rocket science, and you have complete control over the desired protocol. Keary Suska Esoteritech, Inc. "Leveraging Open Source for a better Internet" > From: Victor Ivanov <v0rbiz@icon.bg> > Date: Thu, 18 Oct 2001 12:17:00 +0300 > To: pgsql-general@postgresql.org > Subject: [GENERAL] creating a custom server > > Hi! > > First, sorry if this is off topic. Second, WARNING: broken english > ahead :) > > Is it possible to create a 'custom' server which can accept normal > connections from normal clients, but use different language (or just > 'proxy' the queries to the real server)? A friend of mine told me this > is a feature of some commercial sql server. What I acutaly want to do > is to add another layer between the client and the server. > > For example, a client connects and issues a query like 'show sessions'. > My server checks if the client has permission (according to a table in > postgres) and then 'translates' the query to 'select * from sessions' or > something else. The result is then sent back to the client (possibly > modified). > > Another way to do this is to get the communication library and use > it in my application... > > Any ideas/hints/etc will be appreciated. > > -- > Players win and winners play > Have a lucky day > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org >
On Thu, 18 Oct 2001, Keary Suska wrote: > > First, sorry if this is off topic. Second, WARNING: broken english > > ahead :) > > > > Is it possible to create a 'custom' server which can accept normal > > connections from normal clients, but use different language (or just > > 'proxy' the queries to the real server)? A friend of mine told me this > > is a feature of some commercial sql server. What I acutaly want to do > > is to add another layer between the client and the server. > > > > For example, a client connects and issues a query like 'show sessions'. > > My server checks if the client has permission (according to a table in > > postgres) and then 'translates' the query to 'select * from sessions' or > > something else. The result is then sent back to the client (possibly > > modified). What your friend is talking about is probably Sybase Open Server. This is usually done using some sort of middleware, but in case of postgresql, you can do something similar to it using plperl. The idea here is not just translation of queries, but providing higher-level abstraction for client-server interaction, not just a query taking a finite number of arguments that returns recordset, but a request containing serialized data structure returning another serialized data structure. Each structure can be arbitrarily complex (hash of array of hashes, for example), as long is it can be serialized and deserialized. pl/perl is a perl programming language for postgresql, you can write a stored procedure that will accept a binary string that represents a serialized structure, and returns the same. Let me know if I can explain it further. -alex