Then web2py cannot do this (yet). You would need to create a view for
your tables with lowercase table names or perhaps there is some
obscure postgresql parameters to make the queries case sensitive
(mysql has it).

On Mar 11, 2:10 pm, Ross Peoples <[email protected]> wrote:
> I should have mentioned that I already did this, so now my table definition 
> matches the one you gave. It was after correcting the definition that I get 
> this message. Again, the tables and fields were created using double-quotes 
> (e.g. CREATE TABLE "GlobalSettings"...), so PostgreSQL requires that all 
> queries use double-quotes when referring to tables and fields created this 
> way.
>
> If I do a db()._select(db.GlobalSettings.ALL)...notice the underscore, I get:
>
> SELECT  GlobalSettings.settingID, GlobalSettings.settingName, 
> GlobalSettings.settingValue FROM GlobalSettings;
>
> But for PostgreSQL to accept the query, it would have to be:
>
> SELECT  "GlobalSettings"."settingID", "GlobalSettings"."settingName", 
> "GlobalSettings"."settingValue" FROM "GlobalSettings";
>
> This is because unless you specifically wrap table and field names with 
> double-quotes, PostgreSQL automatically converts all table and field names to 
> lowercase.
>
> On Mar 11, 2011, at 3:02 PM, Massimo Di Pierro wrote:
>
>
>
>
>
>
>
> > It cannot be
>
> > Field('"settingName"', length=255, unique=True),
>
> > must be
>
> > Field('settingName', length=255, unique=True),
>
> > you cannot have quotes in the file name.
> > So it should be
>
> > db.define_table('GlobalSettings',
> >    Field('settingName', length=255, unique=True),
> >    Field('settingValue', 'text'),
> >    Field('settingID', 'id'),
> >    sequence_name='GlobalSettings_settingID_seq',
> >    migrate=False)
>
> > Case must match DB. migrate=False because it exists. I am not 100%
> > sure but I think this should work.
>
> > On Mar 11, 12:56 pm, Ross Peoples <[email protected]> wrote:
> >> After also adding migrate=False to the table definition, I now get this
> >> error:
>
> >> ProgrammingError: relation "globalsettings" does not exist
> >> LINE 1: ...ngs.settingName, GlobalSettings.settingValue FROM GlobalSett...
>
> >> On Thursday, March 10, 2011 3:02:25 PM UTC-5, Richard wrote:
>
> >>> remove the " from web2py model and add the sequence name that postgres
> >>> create by default with a different name then web2py expect like this :
>
> >>> db.define_table('GlobalSettings',
> >>>     Field('settingName', length=255, unique=True),
> >>>     Field('settingValue', 'text'),
> >>>     Field('settingID', 'id'),
> >>>     sequence_name='GlobalSettings_settingID_seq'
> >>> )
>
> >>> It should works...
>
> >>> Richard
>
> >>> On Thu, Mar 10, 2011 at 2:42 PM, Ross Peoples <[email protected]> wrote:
>
> >>>> I have a legacy PostgreSQL database that has its tables and field names
> >>>> created using a case-sensitive means. Whenever I try to do a select(), it
> >>>> returns no rows, and an insert() fails. This is the error that web2py 
> >>>> gives:
>
> >>>> ProgrammingError: relation "globalsettings_id_seq" does not exist
>
> >>>> LINE 1: select currval('GlobalSettings_id_Seq')
>
> >>>> This is the actual table definition from pgAdmin3:
>
> >>>> CREATE TABLE "GlobalSettings"
> >>>> (
> >>>>   "settingName" character varying(255) NOT NULL,
> >>>>   "settingValue" text NOT NULL,
> >>>>   "settingID" serial NOT NULL,
> >>>>   CONSTRAINT "GlobalSettings_pkey" PRIMARY KEY ("settingID")
> >>>> )
>
> >>>> Attempting to define my table in web2py using double-quotes between
> >>>> single-quotes, like this:
>
> >>>> db.define_table('"GlobalSettings"',
> >>>>     Field('"settingName"', length=255, unique=True),
> >>>>     Field('"settingValue"', 'text'),
> >>>>     Field('"settingID"', 'id')
> >>>> )
>
> >>>> results in the following error message: SyntaxError: only [0-9a-zA-Z_] 
> >>>> allowed
> >>>> in table and field names, received "settingName"

Reply via email to