Создание и доступ к схеме, начинающейся со значения numeri c в Postgresql - PullRequest
0 голосов
/ 18 июня 2020

Я генерирую 10-символьную буквенно-цифровую c случайную строку в качестве имени схемы для каждого нового клиента в моей БД.

В этом одном случае он сгенерировал «5ku2mug7m8» как строку. Схема была создана правильно (в pi c), но при доступе к схеме ошибка

"ERROR:  syntax error at or near "5"
LINE 1: SELECT * FROM 5ku2mug7m8.tablename"

, которая, как я понимаю, связана с ведущим числом c. Я попытался заключить схему в двойные кавычки (""), но postgres не принимает этого.

Мой вопрос: если я не могу получить доступ к схеме с начальным числом c, почему postgres разрешает его создание в первую очередь? Теперь я сижу в БД с схемой, к которой нельзя получить доступ - если только это не возможно, а мне просто ее не хватает?

РЕДАКТИРОВАТЬ: Из документации,

SQL идентификаторы и ключевые слова должны начинаться с буквы (az, но также с букв с диакритическими знаками и нелатинскими буквами) или подчеркивание (_). Последующие символы в идентификаторе или ключевом слове могут быть буквами, подчеркиванием, цифрами (0–9) или знаками доллара ($). Обратите внимание, что знаки доллара не разрешены в идентификаторах в соответствии с буквой стандарта SQL, поэтому их использование может сделать приложения менее переносимыми ...

Но зачем разрешать создание схемы без каких-либо ошибок в первую очередь? Любопытно.

schema name

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вероятно, вы создали схему с помощью pgAdmin, и этот инструмент автоматически добавил за вас двойные кавычки.

Конечно, вы можете удалить схему с помощью

DROP SCHEMA "5ku2mug7m8";

, если у вас нет таких неприятных вещей, как пробелы в начале или в конце имени схемы.

Вы можете узнать настоящее имя схемы с помощью:

SELECT quote_ident(nspname)
FROM pg_namespace
WHERE nspname LIKE '%5%';

Ваш опыт и исследование документации очень ценны. Вы уже поняли, почему выбирать имена объектов или столбцов («идентификаторы»), которые являются действительными SQL идентификаторами и не требуют двойных кавычек, - плохая идея.

0 голосов
/ 18 июня 2020

Вы можете создать схему, имя которой начинается с di git, если имя схемы состоит из двойных кавычек.

Демо с psql:

# select version();
                                                 version                        

--------------------------------------------------------------------------------
-------------------------
 PostgreSQL 12.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (R
ed Hat 4.8.5-39), 64-bit

# create schema "5ku";
CREATE SCHEMA

# create table "5ku".t(x int);
CREATE TABLE

# select * from "5ku".t;
 x 
---
(0 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...