Re: Does has_table_privilege() have a case bug

From: brian <brian(at)zijn-digital(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Does has_table_privilege() have a case bug
Date: 2008-02-06 00:40:18
Message-ID: 47A901F2.4010808@zijn-digital.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Jeff Davis wrote:
> On Tue, 2008-02-05 at 16:10 -0800, johnf wrote:
>> I create a table named "Account_Text_Table" the owner is 'johnf'.
>>
>> select has_table_privilege('johnf', 'public.Account_Text_Table', 'SELECT')
>> I get the following error:
>>
>> ERROR: relation "public.account_text_table" does not exist
>
> PostgreSQL folds to lower case unless you put the name in double-quotes.
> Try putting the table name in double-quotes.
>
> E.g.: select has_table_privilege('johnf', 'public."Account_Text_Table"',
> 'SELECT')
>

That won't help if the table was not created with a quoted name.

test=# CREATE TABLE Account_Text_Table (foo CHAR(1));
CREATE TABLE

test=# SELECT * FROM Account_Text_Table;
foo
-----
(0 rows)

test=# SELECT * FROM "Account_Text_Table";
ERROR: relation "Account_Text_Table" does not exist

test=# DROP TABLE account_text_table;
DROP TABLE

test=# CREATE TABLE "Account_Text_Table" (foo CHAR(1));
CREATE TABLE

test=# SELECT * FROM Account_Text_Table;
ERROR: relation "account_text_table" does not exist

test=# SELECT * FROM "Account_Text_Table";
foo
-----
(0 rows)

So, you'll need to quote the table name when you create it. But this
means that you'll *always* have to quote references to it.

Easiest to stick with lowercase, IMO.

b

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message johnf 2008-02-06 01:50:13 Re: Does has_table_privilege() have a case bug
Previous Message Jeff Davis 2008-02-06 00:27:19 Re: Does has_table_privilege() have a case bug