Re: Переме

From: Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>
To: "Alexander M(dot) Pravking" <fduch(at)antar(dot)bryansk(dot)ru>
Cc: pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org>
Subject: Re: Переме
Date: 2006-03-19 06:18:10
Message-ID: Pine.GSO.4.63.0603190917300.6686@ra.sai.msu.su
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

On Sun, 19 Mar 2006, Alexander M. Pravking wrote:

> On Sat, 2006-03-18 at 14:04 +0300, Oleg Bartunov wrote:
>> On Sat, 18 Mar 2006, Serik wrote:
>>
>>> Добрый день !
>>> Можно в PostgreSQL объявлять свои переменные , типа client_encoding,
>>> timezone и т.д.,
>>> чтобы их значения были видны только одному пользователю в пределах сессии ?
>>
>> можно, set client_encoding = 'koi8=r';
>> А можно еще и документацию почитать.
>> http://www.postgresql.org/docs/8.1/static/sql-set.html
>
> Скорее всего, имелись в виду не PG'шные встроенные, а именно
> user-defined переменные.

не уверен, но по твоей теме был тред
http://www.pgsql.ru/db/pgsearch/index.html?group=1&page=1&site=archives.postgresql.org%2F&tmpl=%F0%D2%C9%D7%C5%D4&q=session%20variables&ps=10
Там через view реализовано

>
> Мне интересна эта тема, поскольку я в своё время не нашёл положительного
> ответа на подобный вопрос, однако нашёл другой способ - через создание
> временной таблицы, у которой срок жизни - как раз сессия. Однако такой
> подход делает нагрузку на системные таблицы (pg_class, pg_attribute),
> что иногда заметно сказывается на производительности. Так что было бы
> неплохо, если бы в PG появился более стандартный способ.
>
> Привожу функции для управления такими "переменными":
>
>
> CREATE OR REPLACE FUNCTION get_session_var(text) RETURNS text AS '
> DECLARE
> _x record;
> BEGIN
> SELECT 1 INTO _x FROM pg_class
> WHERE relname = ''session_vars''
> AND relkind = ''r''
> AND CASE WHEN has_schema_privilege(relnamespace,''USAGE'')
> THEN pg_table_is_visible(oid)
> ELSE false
> END;
>
> IF NOT FOUND THEN RETURN NULL; END IF;
>
> FOR _x IN EXECUTE ''SELECT value FROM session_vars WHERE var = '' || quote_literal($1)
> LOOP
> RETURN _x.value;
> END LOOP;
> RETURN NULL;
> END' LANGUAGE 'plPgSQL' STRICT;
>
>
> CREATE OR REPLACE FUNCTION set_session_var(text, text) RETURNS text AS '
> DECLARE
> _x integer;
> BEGIN
> SELECT 1 INTO _x FROM pg_class
> WHERE relname = ''session_vars''
> AND relkind = ''r''
> AND CASE WHEN has_schema_privilege(relnamespace,''USAGE'')
> THEN pg_table_is_visible(oid)
> ELSE false
> END;
>
> IF NOT FOUND THEN
> EXECUTE ''CREATE TEMP TABLE session_vars (var text, value text) WITHOUT OIDS'';
> ELSE
> EXECUTE ''DELETE FROM session_vars WHERE var = ''||quote_literal($1);
> END IF;
> EXECUTE ''INSERT INTO session_vars VALUES ('' ||
> quote_literal($1) || '', '' || coalesce(quote_literal($2), ''NULL'') ||
> '')'';
> RETURN $2;
> END' LANGUAGE 'plPgSQL';
>
>
>
> Замечу также, что проверка pg_table_is_visible() без has_schema_privilege()
> в функциях недостаточна, на этот счёт я уже писал в -hackers:
>
> http://archives.postgresql.org/pgsql-hackers/2005-06/msg00319.php
>
>
>

Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
Sternberg Astronomical Institute, Moscow University, Russia
Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
phone: +007(495)939-16-83, +007(495)939-23-83
>From pgsql-ru-general-owner(at)postgresql(dot)org Tue Mar 21 01:23:27 2006
X-Original-To: pgsql-ru-general-postgresql(dot)org(at)localhost(dot)postgresql(dot)org
Received: from localhost (av.hub.org [200.46.204.144])
by postgresql.org (Postfix) with ESMTP id A53549DCB75
for <pgsql-ru-general-postgresql(dot)org(at)localhost(dot)postgresql(dot)org>; Tue, 21 Mar 2006 01:23:26 -0400 (AST)
Received: from postgresql.org ([200.46.204.71])
by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
with ESMTP id 65203-10
for <pgsql-ru-general-postgresql(dot)org(at)localhost(dot)postgresql(dot)org>;
Tue, 21 Mar 2006 01:23:25 -0400 (AST)
X-Greylist: domain auto-whitelisted by SQLgrey-
Received: from zproxy.gmail.com (zproxy.gmail.com [64.233.162.192])
by postgresql.org (Postfix) with ESMTP id 972B39DC9C8
for <pgsql-ru-general(at)postgresql(dot)org>; Tue, 21 Mar 2006 01:23:24 -0400 (AST)
Received: by zproxy.gmail.com with SMTP id 9so1421942nzo
for <pgsql-ru-general(at)postgresql(dot)org>; Mon, 20 Mar 2006 21:23:24 -0800 (PST)
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
s=beta; d=gmail.com;
h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition;
b=s7pxUZh0g1pGzZ/VQ4etNXoop4DmCz5AJQwCpWSPgk/1zmOp5MmhTIguoJSGMZUJtdU6QcESmCWq4PBbJH+IeZ+q/COLaCu6L+tf4wGKQaWZEdpPL0yCDKUpKL9tDSsmJzYMA06RRunotKQtVGvosjV7bj6sBqQ5IETh0I9iFDI=
Received: by 10.36.221.37 with SMTP id t37mr2394832nzg;
Mon, 20 Mar 2006 21:23:24 -0800 (PST)
Received: by 10.36.252.49 with HTTP; Mon, 20 Mar 2006 21:23:24 -0800 (PST)
Message-ID: <3ee570b70603202123q4aba08cfv(at)mail(dot)gmail(dot)com>
Date: Tue, 21 Mar 2006 10:23:24 +0500
From: "=?KOI8-R?B?5sXEz9LP1yDtycjBycwg99HexdPMwdfP18ne?=" <mvfedorov(at)gmail(dot)com>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: =?KOI8-R?B?5MnT1NLJwtXUydcg0M8gZW1haWw/?=
MIME-Version: 1.0
Content-Type: text/plain; charset=KOI8-R
Content-Transfer-Encoding: base64
Content-Disposition: inline
X-Virus-Scanned: by amavisd-new at hub.org
X-Spam-Status: No, score=0 required=5 tests=[none]
X-Spam-Score: 0
X-Spam-Level:
X-Archive-Number: 200603/9
X-Sequence-Number: 514

7c/Wzs8gzMkgy8HLLc7JwtXE2CDQz8zV3snU2CDQz8HMxcTOycogxMnT1NLJwtXUydcgKDguMSDL
wdbF1NPRKSAg0M8KZW1haWw/IM/exc7YIM7BxM8sIMEg08vB3sHU2CDOxdQg18/azc/Wzs/T1Mks
IMXTzMkgy9TPINPNz9bF1CDX2dvMydTFCtPAxMEgbXZmZWRvcm92IEAgZ21haWwgLiBjb20g3sHT
1NHNySDOxSDCz8zY28UgMTAgzcXHz9cgLCDM1d7bxQrawdLB0snU2C4g89DB08nCzy4KLS0K5sXE
z9LP1yDtycjBycwg99HexdPMwdfP18neCg==

In response to

Browse pgsql-ru-general by date

  From Date Subject
Next Message Федоров Михаил Вячеславович 2006-03-21 05:24:50 Дистрибутив по email?
Previous Message Андрей Зевакин 2006-03-19 04:45:19 Re: Переме