Только не используйте двойные кавычки, которых вам все равно следует избегать, если это вообще возможно. См. Документация :
SQL идентификаторы и ключевые слова должны начинаться с буквы (az, но также буквы с диакритическими знаками и нелатинскими буквами) или подчеркивания (_ ). Последующими символами в идентификаторе или ключевом слове могут быть буквы, подчеркивания, цифры (0-9) или знаки доллара ($). Обратите внимание, что знаки доллара не допускаются в идентификаторах в соответствии с буквой стандарта SQL, поэтому их использование может сделать приложения менее переносимыми. Стандарт SQL не будет определять ключевое слово, которое содержит цифры, начинается или заканчивается подчеркиванием, поэтому идентификаторы этой формы защищены от возможного конфликта с будущими расширениями стандарта. ... Существует второй тип идентификатора: идентификатор с разделителями или идентификатор в кавычках. Он формируется путем заключения произвольной последовательности символов в двойные кавычки ("). Идентификатор с разделителями всегда является идентификатором, а не ключевым словом. ... Идентификаторы в кавычках могут содержать любой символ, кроме символа с нулевым кодом. включите двойные кавычки, напишите две двойные кавычки.) Это позволяет создавать имена таблиц или столбцов, которые в противном случае были бы невозможны, например, содержащие пробелы или амперсанды.
Не удваивая кавычки в ваших примерах, эти имена недействительны, и Postgres не имеет проблем, рассказывая об этом. Так что просто не используйте их.
Также вы можете создать триггер события. Внутри него вы можете ограничивать имена объектов по мере необходимости, особенно полезно, если у вас есть строгие стандарты именования. Это позволило бы применять эти стандарты в базе данных;
create function app_validate_table_name()
returns event_trigger
language 'plpgsql'
as $$
begin
if obj.object_identity ~! '[A-Za-z$_][[A-Za-z0-9$_]{0,62}'
then
raise exception 'App Error: Request Name (%) is invalid for <Your App Name here>',obj.object_identity;
end if
return;
end ;
$$;
create event trigger app_table_event_trigger on ddl_command_end
when tag in ('ALTER TABLE', 'CREATE TABLE')
execute procedure app_validate_table_name();
Хотя то же самое можно применять к другим объектам, оно, к сожалению, не относится к созданию самой базы данных. Отказ от ответственности: Выше не было проверено.