adrian.klaver@aklaver.com wrote:
The way I see is if it where an actual identifier then this:
select * from quote_ident('$dog');
quote_ident
-------------
"$dog"
would be equal to this:
select * from "$dog";
I think that the clue here is to go into philosophical overdrive. SQL statements, and if-then-else programs, are platonic notions. Like in the famous example of the notion of Boston itself—as opposed to how it's denoted in different contexts. Some would refer to it by saying "Boston". Others would say "波士顿".
In our world, the phenomenon is illustrated by this (after authorizing as a superuser):
create role "my name" login;
create database db;
grant all on database db to "my name";
\c db "my name"
create schema s;
create table s."silly name"(n int);
select relname
from pg_class c inner join pg_roles r on c.relowner = r.oid
where r.rolname = 'my name';
This is the result (in "\t on" mode)
silly name
So that's *three* different ways to denote the platonic notion that I had in my head, of a certain table in a certain schema in a certain database, before I typed anything
What we deal with in our ordinary professional work is SQL texts, program source texts, within these, SQL identifier texts, and then the conventional display of the results of SQL and program execution. To emphasize the point about resulst display, try "\d s.*" in "\t off" mode. You'll see this:
Table "s.silly name"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
n | integer | | |
But this SQL text:
drop table "s.silly name";
tells me that there's no such table. It's all a matter of convention. In an alternative universe, maybe manifest string constants are rendered, with no delineation, in red text; and identifiers are rendered, again with no delineation, in green text. In another universe, all SQL and program composition is done by talking. Manifest string constants are rendered by shouting; and identifiers are rendered in a whisper. And why not...