Я генерирую 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, поэтому их использование может сделать приложения менее переносимыми ...
Но зачем разрешать создание схемы без каких-либо ошибок в первую очередь? Любопытно.