Octo should store case-insensitive SQL identifiers in lower case format
Final Release Note
Description
Until now, Octo has stored case-insensitive SQL identifiers, e.g. table and column names, internally in upper case format. However, this is the opposite of the PostgreSQL convention, which stores them in lower case format, thus resulting in incompatibilities with some clients and drivers, e.g. PGAdmin (#588) and Ngpsql (used by PowerBI (#867 (closed))).
Specifically, each client constructs its own queries for retrieving table and column information from the database. Moreover, each client does this in its own unique way, using its own particular queries. Some of these queries have implicit assumptions regarding features and conventions used by PostgreSQL. Among these is the storage of SQL identifiers in lower case by default.
Since Octo does not construct these queries, it is not possible for it to force the queries to reference SQL constructs using upper case identifiers. As a result, clients attempting queries that assume lower case identifiers will result in either syntax errors or, worse, erroneous query results.
Accordingly, to support clients that construct such queries, it is necessary for Octo to store SQL identifiers internally in lower case format, reflecting the PostgreSQL convention.
Draft Release Note
Octo now stores SQL identifiers in lower case format by default, where previously they were uppercase. SQL identifiers affected include table names, column names, and function names.
This change reflects the PostgreSQL convention of treating case-insensitive SQL identifiers as lower case, thus improving compatibility with various PostgreSQL drivers and clients.