Hello,

partitioned tables in PostgreSQL don't report the correct number of
updated rows, so updates from a mapper fail. Reported by Antonio on
the postgresql-it mailing list.

I was able to reproduce the bug this way:

-- Database

CREATE TABLE xtable (
        id serial primary key,
        nave_id integer,
        data_manovra DATE);

CREATE TABLE xtable2007 (
        id integer primary key,
        CHECK ( data_manovra BETWEEN '1/1/2007' AND '31/12/2007' )
) INHERITS (xtable);

CREATE RULE xtable2007_upd AS ON UPDATE TO xtable
        WHERE NEW.data_manovra BETWEEN '1/1/2007' AND '31/12/2007'
        DO INSTEAD UPDATE xtable2007
        SET data_manovra = NEW.data_manovra,
        nave_id = NEW.nave_id
        WHERE id = NEW.id;

INSERT INTO xtable2007 (nave_id, data_manovra) VALUES (10,
'2007-1-2');

# Python

 >>> from sqlalchemy import *
 >>> e = create_engine("postgres://localhost/tsbug")
 >>> meta = BoundMetaData(e)
 >>> t = Table('xtable', meta, autoload=True);
 >>> class Nave(object): pass
 >>> mapper(Nave, t)
 >>> ses = create_session(bind_to=e)
 >>> nave = ses.query(Nave).get(1)
 >>> nave.nave_id = 15
 >>> ses.flush()

An obvious fix is reported below, i don't know if there is a better
way to fix it. Furthermore i didn't check for inserts and deletes (if
you wish i could: i just set up the reported db schema: i can ask the
OP a complete example of partitioned table).

Cheers,

-- Daniele

--- sqlalchemy/databases/postgres.py.bak 2007-06-14 12:02:40  +0200
+++ sqlalchemy/databases/postgres.py 2007-06-14 12:02:30  +0200
@@ -283,6 +283,10 @@
          else:
              return sqltypes.adapt_type(typeobj, pg1_colspecs)

+    def supports_sane_rowcount(self):
+        # It fails for updates on partitioned tables.
+        return False
+
      def compiler(self, statement, bindparams, **kwargs):
          return PGCompiler(self, statement, bindparams, **kwargs)


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to