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
-~----------~----~----~----~------~----~------~--~---

Reply via email to