Обсуждение: problem with update rules on a view (ODBC)

Поиск
Список
Период
Сортировка

problem with update rules on a view (ODBC)

От
Emmanuel Charpentier
Дата:
Dear list,

I am trying to create a small applications using a PostgreSQL 7.2 database,
updated through ODBC from an OpenOffice form.

I have to work on a small (about 300 rows) subset of a larger (about 10000
rows) ser of records, encompassing many tables. in the subset, one has to
make updates to a boolean field, using (informally : this has to be decided
by a human (a physician, in fact) after reading the information).

I created a view defining the subset of interest, which has two column : an
identifier (primary key of the underlying table), and the boolean variable
of interest. The main OpenOffice form is based on this view, and uses
subforms to display in a convenient manner the records of the other tables
associated with the record of the main table under examination.

I created two update rules on the view : the first one is conditional : its
WHERE clause tests for a change of the boolean variable
(new.value!=old.value) and, if so, updates INSTEAD the underlying table
WHERE primarykey=new.primarykey ; the second rule, unconditional, does
INSTEAD NOTHING. The first rule uses typecasts (OpenOffice insists to use
'0' and '1' as a representation of booleans).

The form works OK, displays the correct set of rows and correctly
associates subrecords with the main record. However, I cannot update
through the form. OpenOffice detects an error during the update.

I tried my  rules "by hand" in psql : the update works as advertised in the
docs. However, I noticed that updating the *real" table gives a message :
UPDATE 1
after updating the table, while updating the view gives the message
UPDATE 0
after "updating" the view (i. e. updating the underlying table).

The same thing happens when I create a single non-conditional INSTEAD rule
(reporting the condition in the where clause of the update query, which is
possible in this case) : the record gets updated, and I get an "UPDATE 0"
message.

This might be the source of my problems : if ODBC returns something to the
effect of "zero records updated", OpenOffice has reasons to report an error.

What do I do wrong ?

Is that a known problem ?

Is there a workaround ?

Sincerely,

                    Emmanuel Charpentier

PS : Culd you please Cc: me your answers : I'm following the list (from
time to time) through the Newsgroup interface ... E. C.

--
Emmanuel Charpentier


Re: [GENERAL] problem with update rules on a view (ODBC)

От
Tom Lane
Дата:
Emmanuel Charpentier <charpent@bacbuc.dyndns.org> writes:
> I am trying to create a small applications using a PostgreSQL 7.2 database,
> updated through ODBC from an OpenOffice form.
> ...
> I tried my  rules "by hand" in psql : the update works as advertised in the
> docs. However, I noticed that updating the *real" table gives a message :
> UPDATE 1
> after updating the table, while updating the view gives the message
> UPDATE 0
> after "updating" the view (i. e. updating the underlying table).

You can control this in 7.3 by adjusting the rule firing order (which
you do by choosing the names you give to the rules); see
http://www.ca.postgresql.org/users-lounge/docs/7.3/postgres/rules-status.html

I am not sure there is any good workaround in 7.2.

            regards, tom lane

Re: [GENERAL] problem with update rules on a view (ODBC)

От
Emmanuel Charpentier
Дата:
Tom Lane wrote:
> Emmanuel Charpentier <charpent@bacbuc.dyndns.org> writes:
> 
>>I am trying to create a small applications using a PostgreSQL 7.2 database, 
>>updated through ODBC from an OpenOffice form.
>>...
>>I tried my  rules "by hand" in psql : the update works as advertised in the 
>>docs. However, I noticed that updating the *real" table gives a message :
>>UPDATE 1
>>after updating the table, while updating the view gives the message
>>UPDATE 0
>>after "updating" the view (i. e. updating the underlying table).
> 
> 
> You can control this in 7.3 by adjusting the rule firing order (which
> you do by choosing the names you give to the rules); see
> http://www.ca.postgresql.org/users-lounge/docs/7.3/postgres/rules-status.html

Thanks a lot ! I will give it a shot. However, I'm a bit reluctant : my 
test machine is Debian stable but with some unstable packages : it may 
accept the (unstable) Postgres 7.3 package. My production machine, however 
is Debian stable and has to remain so (therefore, no "official" 7.3 
packages) ... Word going around is that the new libc6 (2.3.x) has some 
nasty problems (I've encountered some of them myself : some software 
suddenly broken by unmet dynamic linking dependencies ...).

> I am not sure there is any good workaround in 7.2.

Aaaahhhh ... Now, I'll just have to nag Oliver Elphick into making his 
Debian-stable-Woody PostgreSQL repository apt-get-able ... :-).

Anyway, a big "Thank you" ! The "Open source" software, and especially the 
Postgres team, proves abgain itself much more usable than commercial 
solutions when it comes to support.



Re: [GENERAL] problem with update rules on a view (ODBC)

От
"Nigel J. Andrews"
Дата:
On Sun, 12 Jan 2003, Emmanuel Charpentier wrote:

> Tom Lane wrote:
> > Emmanuel Charpentier <charpent@bacbuc.dyndns.org> writes:
> > 
> >>I am trying to create a small applications using a PostgreSQL 7.2 database, 
> >>updated through ODBC from an OpenOffice form.
> >>...
> >>I tried my  rules "by hand" in psql : the update works as advertised in the 
> >>docs. However, I noticed that updating the *real" table gives a message :
> >>UPDATE 1
> >>after updating the table, while updating the view gives the message
> >>UPDATE 0
> >>after "updating" the view (i. e. updating the underlying table).
> > 
> > 
> > You can control this in 7.3 by adjusting the rule firing order (which
> > you do by choosing the names you give to the rules); see
> > http://www.ca.postgresql.org/users-lounge/docs/7.3/postgres/rules-status.html
> 
> Thanks a lot ! I will give it a shot. However, I'm a bit reluctant : my 
> test machine is Debian stable but with some unstable packages : it may 
> accept the (unstable) Postgres 7.3 package. My production machine, however 
> is Debian stable and has to remain so (therefore, no "official" 7.3 
> packages) ... Word going around is that the new libc6 (2.3.x) has some 
> nasty problems (I've encountered some of them myself : some software 
> suddenly broken by unmet dynamic linking dependencies ...).

Compiles fine on a server I did last week, and I even compiled it in the middle
of a huge panic about building other software with interdependencies on the
same box. Tests past, although I must admit to skipping the bigcheck due to
the postgres install becoming the critical path on one of the things I was
doing.

> 
> > I am not sure there is any good workaround in 7.2.
> 
> Aaaahhhh ... Now, I'll just have to nag Oliver Elphick into making his 
> Debian-stable-Woody PostgreSQL repository apt-get-able ... :-).

I'm thinking now you are only looking for binary packages. Is building from
source unacceptable or impossible?

> Anyway, a big "Thank you" ! The "Open source" software, and especially the 
> Postgres team, proves abgain itself much more usable than commercial 
> solutions when it comes to support.


-- 
Nigel J. Andrews



Re: [GENERAL] problem with update rules on a view (ODBC)

От
Emmanuel Charpentier
Дата:
Nigel J. Andrews wrote:


[ ... ]

>I'm thinking now you are only looking for binary packages. Is building from
>source unacceptable or impossible?
>
On Debian, it's sometimes ... mmm ... intricate. When all is fine, it's 
a breeze. But when you start to have a mix of packages from various 
releases, things tend to be a bit harder. Furthermore, when you need 
non-standard tools (and this is the case with Postgres, IIRC), it's 
often *much* better to use the (usually marvellous) work of Debian 
maintainers. After all, I'm maintaining a databas to use it, not for the 
sake of maintaining it's DBMS : I use Postgres and Debian because they 
are the right tool for my purposes, not for love of the tools themselves.

Sincerely,
                   Emmanuel Charpentier