Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Как правильно использовать дефис при переименовании БД в PostgreSQL

Быстрый ответ

В PostgreSQL экранирование дефиса (-) не требуется. Вам не нужно беспокоиться о "-" или подобных ухищрениях. Дефис в строковых литералах так же обычен, как символы a или b. Однако применительно к шаблонам LIKE и регулярным выражениям стоит уделить ему больше внимания. В контексте с LIKE все достаточно просто:

SQL
Скопировать код
SELECT 'hyphen-test' LIKE 'hyphen-%';  /* Вернет TRUE, с дефисом всё в порядке */

Что касается регулярных выражений, дефис следует располагать на первом или последнем месте в списке символов внутри квадратных скобок для избежания путаницы:

SQL
Скопировать код
SELECT 'regex-test' ~ '^[a-z-]+$';     /* Вернет TRUE, дефис расположен в конце списка */

Для идентификаторов (подразумеваются названия баз данных, таблиц и колонок), просто оберните дефисы в двойные кавычки при задании или изменении их названий:

SQL
Скопировать код
ALTER DATABASE old_name RENAME TO "new-name"; /* Дефис уживается в двойных кавычках */

Приготовьтесть, впереди нас ждет увлекательное исследование дефисов.

Кинга Идем в IT: пошаговый план для смены профессии

Использование дефиса в строковых литералах и шаблонах

В PostgreSQL дефис (-) внутри строкового литерала или шаблона обрабатывается буквально. Для поиска с помощью шаблона LIKE возьмите и просто напишите его как обычно:

SQL
Скопировать код
SELECT 'example-text' LIKE 'example-%';  /* Вернет TRUE, дефис не влияет на результат */

В регулярных выражениях дефис соответствует остальным символам, если вы располагаете его на границе диапазона, и не требует экранирования:

SQL
Скопировать код
SELECT 'example-text' ~ '^[a-z-]+$';     /* Вернет TRUE, дефис уверенно и преуспевающе занимает свое место */

Дефисы в именах идентификаторов

Когда работа с идентификаторами — названиями колонок, таблиц или баз данных — ведется со знаками дефиса, они могут показаться сложными для понимания, но на самом деле это кажущаяся сложность. Проблему решает применение двойных кавычек для сохранения дефисов без необходимости экранирования:

SQL
Скопировать код
ALTER DATABASE old_name RENAME TO "new-name"; 
/* Дефисы не создают проблем, если их заключить в двойные кавычки! */

Двойные кавычки защищают дефис, позволяя ему свободно смешиваться с именами сущностей в PostgreSQL, избегая при этом использования стандартных escape sequences.

Неожиданные ловушки дефиса!

Представьте, что дефис (-) играет с вами в игру в прятки. Найти его среди слов можно сравнить с поиском ребенка в костюме в толпе:

Markdown
Скопировать код
"Я нашел!", — воскликните вы, когда увидите дефис среди слов.

Но в PostgreSQL обнаружить дефис среди слов гораздо проще:

SQL
Скопировать код
SELECT * FROM table WHERE column LIKE '%-%';   /* Дефис найден. Бинго! 🎯 */

Здесь дефис становится всего лишь одним из множестве символов. Он своеобразно выделяется среди слов, как 🐈 в стаде 🐑.

Комфортное сосуществование дефисов и идентификаторов

Смело включайте дефисы в имена идентификаторов, будь то названия баз данных или колонок, просто заключите их в двойные кавычки:

SQL
Скопировать код
CREATE TABLE "user-data" (id SERIAL PRIMARY KEY); /* Выглядит стильно и современно! */

Не забудьте впоследствии обрамлять идентификатор двойными кавычками для последовательности операций:

SQL
Скопировать код
SELECT * FROM "user-data"; /* Всё работает без сбоев, данные на месте и в целости! */

В замысловатом мире обратных и одинарных кавычек система PostgreSQL строго привязана к использованию двойных кавычек.

В каких случаях выбор дефисов оправдан?

Включение дефисов в имена идентификаторов может прошло изначально грамотно, несмотря на возможные трудности. Хоть в PostgreSQL можно обойти эту проблему, используя двойные кавычки, есть некоторые пункты на которые стоит обратить внимание:

  • Усложнение кода: Постоянное обрамление идентификаторов двойными кавычками может стать причиной ошибок, особенно в динамических запросах.
  • Ухудшение читабельности кода: Названия, состоящие из частей с дефисами и окруженные кавычками, могут затруднить чтение кода.
  • Несоответствие конвенции: Традиционно для именования используется подчеркивание (_), в то время как дефисы воспринимаются как нестандартный элемент.

Но если вы все же решили остановить свой выбор на дефисах:

  • Всегда оборачивайте их в заботливые и надежные двойные кавычки.
  • Обязательно документируйте этот стиль именования и следите за его применением.
  • Все-таки стоит предпочесть подчеркивание, чтобы избежать ненужных сложностей. Они менее проблематичны!

Полезные материалы

  1. PostgreSQL: Документация: 16: 4.1. Лексическая структура – Здесь подробно рассматривается работа с дефисом в PostgreSQL.
  2. sql – Вставка текста с одиночными кавычками в PostgreSQL – Stack Overflow – Интересный обзор по теме экранирования символов в PostgreSQL.
  3. Работа со строками – PostgreSQL wiki – Подробное пошаговое руководство по работе со строками в PostgreSQL.
  4. Postgres 13 | db<>fiddle – Отличное место для практического опыта работы с PostgreSQL.
  5. PostgreSQL: Документация: 16: 9.7. Поиск по шаблону – Полная информация о шаблонах поиска в PostgreSQL.
  6. Предотвращение SQL-инъекций – OWASP Cheat Sheet Series – Рекомендации по предотвращению SQL-инъекций.
  7. PostgreSQL: Архив рассылки PostgreSQL – Обсуждения в сообществе с ценными советами и рекомендациями.

Завершение

Работа с дефисом в PostgreSQL не обладаает особой сложностью. При использовании в строковых литералах и шаблонах поиска дефис оказывается неназойливым и не требует особых действий. Но выступая в роли идентификатора, дефис требует использования двойных кавычек для своего неповторимого исполнения. Следуя этим рекомендациям, дефис больше не причинит вам беспокойства!

Совершенствуйте себя, углубляйтесь в материал и не забывайте поддержать статью "лайком", если она помогла вам освоить нюансы PostgreSQL. Пусть ваш кодинг будет счастливым, и каждый ваш запрос удачным. Вперед и только вперед, Оптимус Прайм! 👩‍💻

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как следует обрабатывать дефисы в строковых литералах в PostgreSQL?
1 / 5