TGViewer
Грязный ноукодер Грязный ноукодер @lowcodingdev · 3.53K subscribers
Post #97 930
Сегодня я поделюсь лайфхаками по работе с Supabase, которые я узнал, пока автоматизировал многоступенчатый процесс лизинга для мексиканской компании.

1️⃣ Вы можете создать базу через интерфейс, но мне больше нравится описывать вместе с ChatGPT запросы на создание нужных таблиц и просто запускать их во вкладке SQL Editor.

CREATE TABLE public.log_types (
id uuid NOT NULL DEFAULT gen_random_uuid(),
type_name TEXT NOT NULL,
CONSTRAINT log_types_pkey PRIMARY KEY (id)
) TABLESPACE pg_default;

2️⃣Немного о первичном ключе:

- Каждая запись должна иметь уникальный идентификатор, иначе вы не сможете изменять или удалять их.

- Для первичного ключа я использую поле с типом uuid и автоматической генерацией через дефолтное значение - gen_random_uuid(). Можно выбрать порядковую нумерация начиная с 1, но мне такой вариант не подошел, ведь при использовании этого id в ссылке пользователь сможет заменить его на другой и посмотреть чужую запись.

- Если вы ошиблись и хотите поменять тип Primary поля, то вам придется сделать несколько действий - для начала вам нужно снять галочку с текущего поля и сохранить таблицу, только после этого вы сможете выбрать новое поле.

3️⃣ Для разных типов данных можно использовать разные типы поля. Вы можете использовать для текста один и тот же тип text, а можете варьировать тип в зависимости от размера данных, которые собираетесь там хранить. Каждый из типов резервирует в базе определенный размер памяти, поэтому если вы собираетесь делать большой и масштабируемый проект, есть смысл задумываться над типом каждого поля.

- Varchar - короткий текст
- Text - длинный текст
- Timestamptz - дата с временем и таймзоной
- Int8 - для целых чисел
- Float8 - для чисел с точкой
- Bool - для логических переменных
- JSON - для хранения объектов

4️⃣ У поля можно выбрать дефолтное значение - удобно выставлять текущую дату или дефолтный статус.

5️⃣ Вы можете настроить поле с ссылкой на другую таблицу (значок ссылки). Для этого нужно будет выбрать таблицу и нужное поле (uuid). В настройке “Action if referenced row is removed” следует выбрать поведение базы при удалении референса, иначе при удалении записи и наличии связи база выдаст ошибку.

- Cascade - удалить связанные записи
- No action - ничего не делать, но вызывает ошибку
- Set default/NULL - выставить дефолтное/NULL значение (выбрайте это, если не знаете что лучше)

6️⃣ Все типы полей могут быть массивами (значок шестеренки - Set as Array). Однако, ссылки на другие таблицы не поддерживают массивы. Для хранения массива ссылок на другую таблицу следует убрать связь и хранить данные как массив uuid/text.

7️⃣ Не стоит забывать про нейминг таблиц и полей. Я использую snake_case конвенцию, а ссылки на другие таблицы обозначаю как entity_id.

8️⃣ Файлы хранятся отдельно в storage и вызываются/сохраняются по пути файла через API (название папок/название файла.расширение). Каждый файл я храню в отдельной папке пользователя (название - user_id), сами папки хранятся в папке сущности (users). В отдельной таблице в БД хранятся файлы с названием и полным путем до файла в storage (users/user_id/filename.txt).

9️⃣ Для получения временной ссылки на файл (удобно для просмотра) нужно сначала запросить url с помощью запроса https://yourbase.supabase.co/storage/v1/object/sign/file_storage/[filepath] : JSON body {"expiresIn": 600}. Далее эту ссылку можно использовать с префиксом https://yourbase.supabase.co/storage/v1


Данные советы могут содержать неточности и основаны лишь на моем опыте. Также для простоты я использую мастер-ключ для API запросов к базе (получение файлов), что является плохой практикой. Каждый пользователь должен быть создан в Supabase, данные должны быть привязаны к пользователю и для запросов к API нужно использовать токен пользователя, чтобы ограничить доступ к другим файлам.

Ставьте лайк и подписывайтесь, в следующей части мы разберем лайфхаки подключения SQL к Bubble
  • 👍 8
  • 🔥 5
More from @lowcodingdev
  1. Oct 4, 2026Фильмы являются важной частью моей жизни - одни учили меня как нужно и не нужно себя вести…
  2. Sep 22, 2026Не так давно я писал про новую роль, которая может подойти вам с опытом no-code разработки…
  3. Sep 15, 2026Пока описывал, как работает система в маркетинговом агентстве, понял, что уже и сам забыл,…
  4. Sep 10, 2026Автоматизация маркетингового агентства - часть 2 Следующим этапом стало построение сквозно…
  5. Sep 9, 2026У меня 2 оффтоп вопроса: 1. Почему никто не сделал ИИ агента тамагочи, который живет свою…
  6. Sep 8, 2026Автоматизация маркетингового агентства Год назад мне подкинули клиента (шатаут Эдуарду @e_…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →