В последнее время я углубился в PostgreSQL для разработчиков JavaScript, и стало очевидно, что многие разработчики JavaScript предпочитают избегать написания кода на других языках. Они внедряют CSS в JavaScript, HTML в JSX, а теперь и SQL в JavaScript! Эта тенденция проявляется в том, как разработчики используют абстракции, такие как Supabase, который работает поверх PostgREST. Я предлагаю назвать этот синтаксис SamQL-Jackson.
Почему разработчики JavaScript избегают «чистого SQL»?
Разработчики JavaScript часто избегают «чистого SQL» по нескольким причинам:
- У меня нет времени учить SQL.
- Я не хочу учить SQL.
- SQL не является типобезопасным.
1. «У меня нет времени учить SQL.»
Это субъективно и понятно. Если у вас нет времени на изучение новых вещей, это вполне допустимо.
2. «Я не хочу учить SQL.»
Этот пункт также субъективен. Изучение чего-то неинтересного может быть сложным, но SQL широко используется, что делает его ценным навыком.
3. «SQL не является типобезопасным.»
Рассматривая этот вопрос, Jiri Cincura объясняет, что SQL-команды являются типобезопасными на сервере, но не обязательно в вашем коде. Без определения типов нет предварительного просмотра типов в редакторе кода, что усложняет работу с ответами базы данных. Ручное создание этих типов может быть трудоемким и подверженным изменениям.
Разработчики JavaScript часто предпочитают SamQL-Jackson вместо «чистого SQL», потому что многие поставщики баз данных для JavaScript предлагают встроенную типобезопасность в своих клиентах и SDK. Однако синтаксис каждого поставщика отличается, что требует от разработчиков изучения нового синтаксиса при смене поставщика.
Например, простой SQL-запрос, выбирающий first_name, country и email из таблицы users, будет выглядеть по-разному в Supabase и Xata:
- Supabase
View the code on Gist.
- Xata
View the code on Gist.
Оба запроса отличаются, и смена поставщика означает изучение нового синтаксиса и переписывание запросов. Написание SQL обеспечивает совместимость с любым решением PostgreSQL, что ставит под сомнение аргументы о времени и интересе к изучению SQL.
Решения для типобезопасности при использовании «чистого SQL»
Для тех, кто выбирает «чистый SQL», но нуждается в типах, есть два решения: kysely-codegen и pg-to-ts. Оба инструмента генерируют типы TypeScript из вашей
Как использовать kysely-codegen
kysely-codegen генерирует определения типов Kysely из вашей базы данных.
Установка Kysely
View the code on Gist.
Скрипт package.json для Kysely
Добавьте скрипт в ваш package.json для создания файла kysely-db.d.ts в корне вашего проекта.
View the code on Gist.
.env файл для Kysely
Добавьте переменную окружения DATABASE_URL в ваш .env файл.
View the code on Gist.
Генерация Kysely
Запустите скрипт для генерации