Re: Дополнение к PostgreSQL.

From: Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>
To: "Denis A(dot) Egorov" <denis(dot)egorov(at)virtonconsultants(dot)com>
Cc: pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org>
Subject: Re: Дополнение к PostgreSQL.
Date: 2005-10-21 19:33:54
Message-ID: Pine.GSO.4.63.0510212333240.23078@ra.sai.msu.su
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Денис,

если сделаешь самодостаточный test-suite, то я проверю под 8.1

Олег
On Fri, 21 Oct 2005, Denis A. Egorov wrote:

> Доброго времени суток!
>
> Вот возникла потребность написать функцию на С для PostgreSQL.
>
> В базе есть lo-объекты, всё проверено, всё работает.
>
> Написал функцию на С, подключил её в pg, ни каких ругательств, но...
>
> В функции делаю:
> fd = lo_open(conn, lobjId, INV_READ);
>
> и мне тут-же возвращается
> ERROR: large object 137550584 does not exist
>
> но что самое интересное указывается не тот OID с которым вызывался lo_open, и возвращаемый OID всегда меняется.
>
> Оформляю эту же функцию в виде программы - всё работает!
>
> Т.е. получается что каким-то страннным образом бьётся OID который попадает
> в lo_open.
>
>
> Буду рад услышать любые идеи, ибо уже идей нет...
>
> P.S.
> SELECT version();
> PostgreSQL 8.0.4 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.0.2 (Debian 4.0.2-2)
>
>
> С уважением,
>

Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83
>From pgsql-ru-general-owner(at)postgresql(dot)org Fri Oct 21 23:48:58 2005
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 svr1.postgresql.org (Postfix) with ESMTP id B1078D6FA6
for <pgsql-ru-general-postgresql(dot)org(at)localhost(dot)postgresql(dot)org>; Mon, 17 Oct 2005 09:25:14 -0300 (ADT)
Received: from svr1.postgresql.org ([200.46.204.71])
by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
with ESMTP id 62485-10
for <pgsql-ru-general-postgresql(dot)org(at)localhost(dot)postgresql(dot)org>;
Mon, 17 Oct 2005 12:25:11 +0000 (GMT)
Received: from victory.tgngu.tyumen.ru (victory.tgngu.tyumen.ru [217.116.51.45])
by svr1.postgresql.org (Postfix) with ESMTP id DCBE3D6FB5
for <pgsql-ru-general(at)postgresql(dot)org>; Mon, 17 Oct 2005 09:25:12 -0300 (ADT)
Received: from [127.0.0.1] (dhcp-vi-33.tgngu.tyumen.ru [192.168.60.34])
by victory.tgngu.tyumen.ru (8.13.2/8.12.9) with ESMTP id j9HCPCAa038355;
Mon, 17 Oct 2005 18:25:12 +0600 (YEKST)
Message-ID: <43539824(dot)7090909(at)tsogu(dot)ru>
Date: Mon, 17 Oct 2005 18:25:08 +0600
From: =?KOI8-R?Q?=E1=CE=C4=D2=C5=CA_=FA=C5=D7=C1=CB=C9=CE?= <zevakin(at)tsogu(dot)ru>
Reply-To: zevakin(at)tsogu(dot)ru
User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
X-Accept-Language: ru-ru, ru
MIME-Version: 1.0
To: Genix <genix(at)list(dot)ru>,
pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org>
Subject: Re: =?KOI8-R?Q?=CF=C2=CE=CF=D7=CC=D1=C0=DD=C9?=
References: <43534F81(dot)9080000(at)list(dot)ru>
In-Reply-To: <43534F81(dot)9080000(at)list(dot)ru>
Content-Type: text/plain; charset=KOI8-R; format=flowed
Content-Transfer-Encoding: 8bit
X-Antivirus: avast! (VPS 0541-4, 16.10.2005), Outbound message
X-Antivirus-Status: Clean
X-Virus-Scanned: ClamAV 0.83/1136/Sun Oct 16 09:04:37 2005 on victory.tgngu.tyumen.ru
X-Virus-Status: Clean
X-Virus-Scanned: by amavisd-new at hub.org
X-Spam-Status: No, hits=0 required=5 tests=[none]
X-Spam-Level:
X-Archive-Number: 200510/30
X-Sequence-Number: 429

Genix пишет:

> Приветствую!
>
> Подскажите пожалуйста, как правильнее создать триггер, который
> обновляет некоторые поля обновленной или вставленной записи?
>
> т.е., например, в таблице, должно быть поле birth_year =
> YEAR(birth_date), и при вставки/обновлении записи в таблице, это
> значение должно заполняться.
>
я бы сделал вот так
CREATE TABLE persons
(
name varchar,
birth_date date,
name_upper varchar,
birth_year int4
) ;

CREATE FUNCTION check_person_trigger_function() RETURNS "trigger" AS '
begin
if new.name is not null then
new.name_upper := upper(new.name);
end if;

if new.birth_date is not null then
new.birth_year := extract(year from new.birth_date);
end if;

return new;
end;
' LANGUAGE 'plpgsql' VOLATILE;

CREATE TRIGGER check_persons_trigger BEFORE INSERT OR UPDATE
ON persons FOR EACH ROW
EXECUTE PROCEDURE public.check_person_trigger_function();

insert into persons (name, birth_date) values ('Юра', '10.10.1970');
select * from persons;

update persons set name = 'Юрий', birth_date = '10.10.1971';
select * from persons;

Browse pgsql-ru-general by date

  From Date Subject
Next Message Maxim Vetrov 2005-10-22 07:41:14 Кодировка
Previous Message Oleg Bartunov 2005-10-18 11:42:29 Re: Администрирование: