my guess is that its confusing the names "virtualization" between the table and column name. im guessing the "field" you send to order_by() is a string otherwise it would render it as tablename.columnname and would be quoted for the upper cased Virtualization.
On Mar 31, 2009, at 5:44 AM, Marcin Krol wrote: > > Hello everyone, > > Now that I have my PG db filled, I'm encountering this exception while > trying to use it: > > ProgrammingError: (ProgrammingError) could not identify an ordering > operator for type virtualization > > HINT: Use an explicit ordering operator or modify the query. > > 'SELECT hosts.id AS hosts_id, hosts."IP" AS "hosts_IP", > hosts."HostName" AS "hosts_HostName", hosts."Location" AS > "hosts_Location", hosts."Architecture_id" AS "hosts_Architecture_id", > hosts."OS_Kind_id" AS "hosts_OS_Kind_id", hosts."OS_version_id" AS > "hosts_OS_version_id", hosts."Additional_info" AS > "hosts_Additional_info", hosts."Column_12" AS "hosts_Column_12", > hosts."Column_13" AS "hosts_Column_13", hosts."Email_id" AS > "hosts_Email_id", hosts."Username" AS "hosts_Username", > hosts."Password" > AS "hosts_Password", hosts."Alias" AS "hosts_Alias", > hosts."Virtualization_id" AS "hosts_Virtualization_id", > hosts."Shareable" AS "hosts_Shareable", > hosts."Shareable_between_projects" AS > "hosts_Shareable_between_projects", hosts."Notes" AS "hosts_Notes", > hosts."CPU" AS "hosts_CPU", hosts."RAM" AS "hosts_RAM", > hosts."Column_24" AS "hosts_Column_24", hosts."Batch" AS > "hosts_Batch", > hosts."ASSET" AS "hosts_ASSET", hosts."Owner" AS "hosts_Owner", > hosts."SSH_KEY_PRESENT" AS "hosts_SSH_KEY_PRESENT", > hosts."Machine_Type_Model" AS "hosts_Machine_Type_Model", > hosts."MAC_ADDRESS_ETH_0" AS "hosts_MAC_ADDRESS_ETH_0", > hosts."Physical_Box" AS "hosts_Physical_Box", hosts."Up_n_running" AS > "hosts_Up_n_running", hosts."Available" AS "hosts_Available", > hosts."Earliest_reservation_id" AS "hosts_Earliest_reservation_id", > hosts."Project_id" AS "hosts_Project_id", architecture.id AS > architecture_id, architecture."Architecture" AS > "architecture_Architecture", os_kind.id AS os_kind_id, > os_kind."OS_Kind" > AS "os_kind_OS_Kind", os_version.id AS os_version_id, > os_version."OS_version" AS "os_version_OS_version", > virtualization.id AS > virtualization_id, virtualization."Virtualization" AS > "virtualization_Virtualization", virtualization.color AS > virtualization_color, project.id AS project_id, project."Project" AS > "project_Project" \nFROM hosts, architecture, os_kind, os_version, > virtualization, project, email \nWHERE hosts."Architecture_id" = > architecture.id AND hosts."OS_Kind_id" = os_kind.id AND > hosts."OS_version_id" = os_version.id AND hosts."Email_id" = email.id > AND hosts."Virtualization_id" = virtualization.id AND > hosts."Project_id" > = project.id AND hosts."Up_n_running" = %(Up_n_running_1)s AND > hosts."Shareable" = %(Shareable_1)s ORDER BY Virtualization DESC, IP > ASC' {'Shareable_1': True, 'Up_n_running_1': True} > > > Note the 'ORDER BY Virtualization' clause. The Postgres docs say: > > 33.13.5. System Dependencies on Operator Classes > > "PostgreSQL uses operator classes to infer the properties of operators > in more ways than just whether they can be used with indexes. > Therefore, > you might want to create operator classes even if you have no > intention > of indexing any columns of your data type. > > In particular, there are SQL features such as ORDER BY and DISTINCT > that > require comparison and sorting of values. To implement these > features on > a user-defined data type, PostgreSQL looks for the default B-tree > operator class for the data type. The "equals" member of this operator > class defines the system's notion of equality of values for GROUP BY > and > DISTINCT, and the sort ordering imposed by the operator class defines > the default ORDER BY ordering. > > Comparison of arrays of user-defined types also relies on the > semantics > defined by the default B-tree operator class. > > If there is no default B-tree operator class for a data type, the > system > will look for a default hash operator class. But since that kind of > operator class only provides equality, in practice it is only enough > to > support array equality. > > When there is no default operator class for a data type, you will get > errors like "could not identify an ordering operator" if you try to > use > these SQL features with the data type. " > > ( http://www.postgresql.org/docs/7.4/static/xindex.html ) > > But I am not using any user-defined data class. It's just a table with > VARCHAR for virtualization.Virtualization column, as created by SQLA: > > reservations=# \d virtualization > Table "public.virtualization" > Column | Type | > Modifiers > ----------------+------------------- > +------------------------------------------------------------- > id | integer | not null default > nextval('virtualization_id_seq'::regclass) > Virtualization | character varying | > color | character varying | > Indexes: > "virtualization_pkey" PRIMARY KEY, btree (id) > > > The SQLA query in question: > > selectexpr = session.query(Host, Architecture, OS_Kind, OS_version, > Virtualization, Project) > ... > if direction == 'descending': > selectexpr = selectexpr.filter_by(Up_n_running = > True).filter_by(Shareable = True).order_by(desc(field)) > else: > selectexpr = selectexpr.filter_by(Up_n_running = > True).filter_by(Shareable = True).order_by(asc(field)) > > ..where field happens to be 'Virtualization' by default. > > The above query works flawlessly with Sqlite, it's just Postgres (8.1) > backend that has this problem. > > Mike! Help! :-) > > Regards, > mk > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---