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