Does has_table_privilege() have a case bug

Started by johnfabout 18 years ago4 messagesgeneral
Jump to latest
#1johnf
jfabiani@yolo.com

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

SUSE 10.3 Postgres 8.1.9
--
John Fabiani

#2Jeff Davis
pgsql@j-davis.com
In reply to: johnf (#1)
Re: Does has_table_privilege() have a case bug

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')

Regards,
Jeff Davis

#3brian
brian@zijn-digital.com
In reply to: Jeff Davis (#2)
Re: Does has_table_privilege() have a case bug

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

#4johnf
jfabiani@yolo.com
In reply to: brian (#3)
Re: Does has_table_privilege() have a case bug

On Tuesday 05 February 2008 04:40:18 pm brian wrote:

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

Thanks guys!

--
John Fabiani