ВозможностиОрганизации
Документация
    Ring Platform

    Децентрализованное самостроящееся будущее

    Войти
    Организации
    Возможности
    Магазин
    Документация
    Концепции платформы
    RING ЭкономикаSonoratek LLCГлобальное влияниеAI встречает Web3
    Начать
    Быстрый стартКалькуляторДорожная карта
    Конфиденциальность|Контакты
    v1.104.26|Sonoratek LLC

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    AI Matcher
    Real-Time Messaging
    Peer Games
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    AI Matcher
    Real-Time Messaging
    Peer Games
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    AI Matcher
    Real-Time Messaging
    Peer Games
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Миграции базы данных

    Ring хранит схему PostgreSQL в двух местах внутри ring/web/data/. schema.sql является сплющенным единый источник истины для новых баз. migrations/ содержит пронумерованные инкрементальные файлы, которые привели существующие базы к той же форме. Эта страница объясняет, какой путь применять и когда.

    Используйте вкладки Основатель / Разработчик в боковой панели документации, чтобы отфильтровать эту страницу. Общие разделы относятся к обеим аудиториям.

    Статус: ./install.sh setup-db и npm run db:apply-schema сейчас падают на публичных checkout, потому что ищут пути, которые переехали под web/. Кроме того, schema.sql содержит CREATE EXTENSION IF NOT EXISTS postgis;, поэтому обычный psql -f data/schema.sql останавливается с ошибкой на образах PostgreSQL без PostGIS (например postgres:16-alpine). Используйте команды из шага 2 ниже.

    Раньше в документацииТекущее поведение
    Применить schema.sql, затем 002, 003, 004 по порядкуСвежие установки применяют только web/data/schema.sql (сплющенный, версия 4.1.0)
    Запустить ./scripts/run-migration.sh или apply-*-migrations-dev.shЭти хелперы отсутствуют в публичном дереве. Используйте psql напрямую
    Установить Homebrew postgresql@18 с bootstrap-скриптомПодойдёт любой PostgreSQL 16 или новее. Bootstrap-скрипт внутренний для Ringdom
    Сеять новости из scripts/seed-news-v1.6.0.sqlЭтого файла нет. Сиды для валют, стран, настроек магазина и категорий новостей находятся внутри schema.sql
    data/schema-delta.sqlНе используется. Дельты живут как пронумерованные файлы в data/migrations/

    Что это значит для вашего сообщества

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

    Новый клон

    Один файл схемы создаёт все таблицы (109 на версии 4.1.0) плюс эталонные сиды. Без повторного проигрывания истории.

    Обновление живого клона

    Ваш разработчик применяет только те пронумерованные файлы, которых база ещё не видела, после бэкапа.

    Выбор базы данных

    PostgreSQL является типичным production-бэкенд (k8s-postgres-fcm).

    Типичные сценарии

    Раскладка web/data

    ПутьНазначение
    data/schema.sqlСплющенный SSOT, версия 4.1.0. Создаёт 109 таблиц public, расширения uuid-ossp, pgcrypto и postgis, а также эталонные сиды
    data/migrations/NNN_*.sqlИнкрементальные изменения, от 001 до 051 в репозитории сегодня
    data/migrations/NNN_*.down.sqlОпциональный rollback, есть для 051
    data/migrations/README.mdПравила добавления миграций. Прочитайте перед написанием
    data/migrations/EMAIL-CRM-OPS.mdOps-заметки для таблиц email CRM

    Каждая закоммиченная пронумерованная миграция до 051 уже свёрнута в schema.sql. Не проигрывайте data/migrations/*.sql на пустой базе и никогда не применяйте 001_email_crm_schema.sql: JSONB CRM-таблицы из 009 и 010 её заменили и входят в schema.sql.

    Приложение подключается через , , , , и . Оно не читает . См. .

    Related documentation

    Self-hosted deployment

    Next-step: run the app against the database you just created.

    Docker

    Same-workflow: apply the schema to the compose Postgres container.

    Backend modes and databases

    Prerequisite: why k8s-postgres-fcm needs this schema.

    Community tooling

    See-also: install.sh and the npm db scripts, including the ones that fail today.

    1. Документация
    2. /С чего начать
    3. /Миграции базы данных

    Обновлено 1 окт. 2026 г.5 мин прослушивания

    Миграции базы данных

    Ring хранит схему PostgreSQL в двух местах внутри ring/web/data/. schema.sql является сплющенным единый источник истины для новых баз. migrations/ содержит пронумерованные инкрементальные файлы, которые привели существующие базы к той же форме. Эта страница объясняет, какой путь применять и когда.

    Используйте вкладки Основатель / Разработчик в боковой панели документации, чтобы отфильтровать эту страницу. Общие разделы относятся к обеим аудиториям.

    Статус: ./install.sh setup-db и npm run db:apply-schema сейчас падают на публичных checkout, потому что ищут пути, которые переехали под web/. Кроме того, schema.sql содержит CREATE EXTENSION IF NOT EXISTS postgis;, поэтому обычный psql -f data/schema.sql останавливается с ошибкой на образах PostgreSQL без PostGIS (например postgres:16-alpine). Используйте команды из шага 2 ниже.

    Раньше в документацииТекущее поведение
    Применить schema.sql, затем 002, 003, 004 по порядкуСвежие установки применяют только web/data/schema.sql (сплющенный, версия 4.1.0)
    Запустить ./scripts/run-migration.sh или apply-*-migrations-dev.shЭти хелперы отсутствуют в публичном дереве. Используйте psql напрямую
    Установить Homebrew postgresql@18 с bootstrap-скриптомПодойдёт любой PostgreSQL 16 или новее. Bootstrap-скрипт внутренний для Ringdom
    Сеять новости из scripts/seed-news-v1.6.0.sqlЭтого файла нет. Сиды для валют, стран, настроек магазина и категорий новостей находятся внутри schema.sql
    data/schema-delta.sqlНе используется. Дельты живут как пронумерованные файлы в data/migrations/

    Что это значит для вашего сообщества

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

    Новый клон

    Один файл схемы создаёт все таблицы (109 на версии 4.1.0) плюс эталонные сиды. Без повторного проигрывания истории.

    Обновление живого клона

    Ваш разработчик применяет только те пронумерованные файлы, которых база ещё не видела, после бэкапа.

    Выбор базы данных

    PostgreSQL является типичным production-бэкенд (k8s-postgres-fcm).

    Типичные сценарии

    Раскладка web/data

    ПутьНазначение
    data/schema.sqlСплющенный SSOT, версия 4.1.0. Создаёт 109 таблиц public, расширения uuid-ossp, pgcrypto и postgis, а также эталонные сиды
    data/migrations/NNN_*.sqlИнкрементальные изменения, от 001 до 051 в репозитории сегодня
    data/migrations/NNN_*.down.sqlОпциональный rollback, есть для 051
    data/migrations/README.mdПравила добавления миграций. Прочитайте перед написанием
    data/migrations/EMAIL-CRM-OPS.mdOps-заметки для таблиц email CRM

    Каждая закоммиченная пронумерованная миграция до 051 уже свёрнута в schema.sql. Не проигрывайте data/migrations/*.sql на пустой базе и никогда не применяйте 001_email_crm_schema.sql: JSONB CRM-таблицы из 009 и 010 её заменили и входят в schema.sql.

    Приложение подключается через , , , , и . Оно не читает . См. .

    Related documentation

    Self-hosted deployment

    Next-step: run the app against the database you just created.

    Docker

    Same-workflow: apply the schema to the compose Postgres container.

    Backend modes and databases

    Prerequisite: why k8s-postgres-fcm needs this schema.

    Community tooling

    See-also: install.sh and the npm db scripts, including the ones that fail today.

    1. Документация
    2. /С чего начать
    3. /Миграции базы данных

    Обновлено 1 окт. 2026 г.5 мин прослушивания

    Миграции базы данных

    Ring хранит схему PostgreSQL в двух местах внутри ring/web/data/. schema.sql является сплющенным единый источник истины для новых баз. migrations/ содержит пронумерованные инкрементальные файлы, которые привели существующие базы к той же форме. Эта страница объясняет, какой путь применять и когда.

    Используйте вкладки Основатель / Разработчик в боковой панели документации, чтобы отфильтровать эту страницу. Общие разделы относятся к обеим аудиториям.

    Статус: ./install.sh setup-db и npm run db:apply-schema сейчас падают на публичных checkout, потому что ищут пути, которые переехали под web/. Кроме того, schema.sql содержит CREATE EXTENSION IF NOT EXISTS postgis;, поэтому обычный psql -f data/schema.sql останавливается с ошибкой на образах PostgreSQL без PostGIS (например postgres:16-alpine). Используйте команды из шага 2 ниже.

    Раньше в документацииТекущее поведение
    Применить schema.sql, затем 002, 003, 004 по порядкуСвежие установки применяют только web/data/schema.sql (сплющенный, версия 4.1.0)
    Запустить ./scripts/run-migration.sh или apply-*-migrations-dev.shЭти хелперы отсутствуют в публичном дереве. Используйте psql напрямую
    Установить Homebrew postgresql@18 с bootstrap-скриптомПодойдёт любой PostgreSQL 16 или новее. Bootstrap-скрипт внутренний для Ringdom
    Сеять новости из scripts/seed-news-v1.6.0.sqlЭтого файла нет. Сиды для валют, стран, настроек магазина и категорий новостей находятся внутри schema.sql
    data/schema-delta.sqlНе используется. Дельты живут как пронумерованные файлы в data/migrations/

    Что это значит для вашего сообщества

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

    Новый клон

    Один файл схемы создаёт все таблицы (109 на версии 4.1.0) плюс эталонные сиды. Без повторного проигрывания истории.

    Обновление живого клона

    Ваш разработчик применяет только те пронумерованные файлы, которых база ещё не видела, после бэкапа.

    Выбор базы данных

    PostgreSQL является типичным production-бэкенд (k8s-postgres-fcm).

    Типичные сценарии

    Раскладка web/data

    ПутьНазначение
    data/schema.sqlСплющенный SSOT, версия 4.1.0. Создаёт 109 таблиц public, расширения uuid-ossp, pgcrypto и postgis, а также эталонные сиды
    data/migrations/NNN_*.sqlИнкрементальные изменения, от 001 до 051 в репозитории сегодня
    data/migrations/NNN_*.down.sqlОпциональный rollback, есть для 051
    data/migrations/README.mdПравила добавления миграций. Прочитайте перед написанием
    data/migrations/EMAIL-CRM-OPS.mdOps-заметки для таблиц email CRM

    Каждая закоммиченная пронумерованная миграция до 051 уже свёрнута в schema.sql. Не проигрывайте data/migrations/*.sql на пустой базе и никогда не применяйте 001_email_crm_schema.sql: JSONB CRM-таблицы из 009 и 010 её заменили и входят в schema.sql.

    Приложение подключается через , , , , и . Оно не читает . См. .

    Related documentation

    Self-hosted deployment

    Next-step: run the app against the database you just created.

    Docker

    Same-workflow: apply the schema to the compose Postgres container.

    Backend modes and databases

    Prerequisite: why k8s-postgres-fcm needs this schema.

    Community tooling

    See-also: install.sh and the npm db scripts, including the ones that fail today.

    1. Документация
    2. /С чего начать
    3. /Миграции базы данных

    Обновлено 1 окт. 2026 г.5 мин прослушивания

  1. Первый запуск. Ваш разработчик создаёт пустую базу и применяет schema.sql. Сайт готов к первому логину админа.
  2. Обновление платформы. Релиз Ring добавляет миграцию вроде 051_likes_uci_favorites_indexes.sql. Ваш разработчик делает бэкап, применяет этот один файл и передеплоит.
  3. После обновления что-то выглядит неправильно. Миграции 051 и новее могут иметь соответствующий .down.sql, чтобы изменение можно было откатить. Более старые файлы нет.
  4. Which schema path applies
    DB_HOST
    DB_PORT
    DB_NAME
    DB_USER
    DB_PASSWORD
    DB_SSL
    DATABASE_URL
    Environment

    Свежая установка

    1. 1

      Создайте пустую базу

      Следующий шаг выполняйте как суперпользователь или владелец базы, потому что schema.sql создаёт расширения.

    2. 2

      Примените schema.sql

      Если на сервере установлен PostGIS (например образ postgis/postgis), примените файл как есть:

      На обычном PostgreSQL сначала уберите строку PostGIS. Ни одна таблица не использует тип PostGIS, поэтому больше ничего не меняется:

    3. 3

      Проверьте результат

      Дайте роли приложения (DB_USER) доступ к схеме public, затем запустите приложение.

    Существующая база

    Применяйте только файлы, которых база ещё не видела. Некоторые миграции записывают себя в schema_versions через INSERT ... WHERE NOT EXISTS (016 до 025, 037, 043 до 046, 050, 051). Остальные этого не делают, поэтому перед применением проверяйте наличие таблиц или индексов, которые они создают.

    Чтобы откатить миграцию с down-файлом, примените 051_likes_uci_favorites_indexes.down.sql так же. Он также удаляет свою строку в schema_versions.

    Добавление миграции (для контрибьюторов)

    1. 1

      Напишите следующий пронумерованный файл

      Возьмите следующий свободный номер после самого высокого файла в data/migrations/. Сделайте его идемпотентным (IF NOT EXISTS), запишите в schema_versions и добавьте .down.sql, когда изменение обратимо.

    2. 2

      Пересоберите schema.sql

      Это запускает ring/scripts/flatten-schema-from-migrations.sh. Нужен локальный PostgreSQL, где ваша роль может создавать базы (PGHOST и PGUSER по умолчанию localhost и ring_user). Скрипт создаёт scratch-базу ring_schema_flatten, бэкапит schema.sql как schema.sql.bak-pre-flatten-<timestamp>, применяет предыдущую схему плюс все миграции кроме 001, дампит DDL плюс эталонные сиды и проверяет результат на ring_schema_flatten_verify. Шаг verify требует PostGIS по той же причине, что выше.

    Часто задаваемые вопросы

    Impact

    Теряю ли я данные, когда схему снова сплющивают?

    Нет. Сплющивание только переписывает файл schema.sql в репозитории. Живые базы оно никогда не трогает.

    Migration

    Мою базу создали из старого schema.sql. Какие файлы мне нужны?

    Сравните SELECT version FROM schema_versions с пронумерованными файлами, затем примените недостающие по порядку после бэкапа. Только некоторые файлы записывают версию (см. «Существующая база» выше), поэтому при сомнении проверяйте их таблицы. Обратите внимание: свежая установка из сегодняшнего schema.sql показывает версии до 045, хотя таблицы и индексы из 046 до 051 уже присутствуют.

    Ops

    Почему падает CREATE EXTENSION postgis?

    Ваша сборка PostgreSQL не включает PostGIS. Уберите эту строку, как показано в шаге 2, или используйте образ с PostGIS.

  5. Первый запуск. Ваш разработчик создаёт пустую базу и применяет schema.sql. Сайт готов к первому логину админа.
  6. Обновление платформы. Релиз Ring добавляет миграцию вроде 051_likes_uci_favorites_indexes.sql. Ваш разработчик делает бэкап, применяет этот один файл и передеплоит.
  7. После обновления что-то выглядит неправильно. Миграции 051 и новее могут иметь соответствующий .down.sql, чтобы изменение можно было откатить. Более старые файлы нет.
  8. Which schema path applies
    DB_HOST
    DB_PORT
    DB_NAME
    DB_USER
    DB_PASSWORD
    DB_SSL
    DATABASE_URL
    Environment

    Свежая установка

    1. 1

      Создайте пустую базу

      Следующий шаг выполняйте как суперпользователь или владелец базы, потому что schema.sql создаёт расширения.

    2. 2

      Примените schema.sql

      Если на сервере установлен PostGIS (например образ postgis/postgis), примените файл как есть:

      На обычном PostgreSQL сначала уберите строку PostGIS. Ни одна таблица не использует тип PostGIS, поэтому больше ничего не меняется:

    3. 3

      Проверьте результат

      Дайте роли приложения (DB_USER) доступ к схеме public, затем запустите приложение.

    Существующая база

    Применяйте только файлы, которых база ещё не видела. Некоторые миграции записывают себя в schema_versions через INSERT ... WHERE NOT EXISTS (016 до 025, 037, 043 до 046, 050, 051). Остальные этого не делают, поэтому перед применением проверяйте наличие таблиц или индексов, которые они создают.

    Чтобы откатить миграцию с down-файлом, примените 051_likes_uci_favorites_indexes.down.sql так же. Он также удаляет свою строку в schema_versions.

    Добавление миграции (для контрибьюторов)

    1. 1

      Напишите следующий пронумерованный файл

      Возьмите следующий свободный номер после самого высокого файла в data/migrations/. Сделайте его идемпотентным (IF NOT EXISTS), запишите в schema_versions и добавьте .down.sql, когда изменение обратимо.

    2. 2

      Пересоберите schema.sql

      Это запускает ring/scripts/flatten-schema-from-migrations.sh. Нужен локальный PostgreSQL, где ваша роль может создавать базы (PGHOST и PGUSER по умолчанию localhost и ring_user). Скрипт создаёт scratch-базу ring_schema_flatten, бэкапит schema.sql как schema.sql.bak-pre-flatten-<timestamp>, применяет предыдущую схему плюс все миграции кроме 001, дампит DDL плюс эталонные сиды и проверяет результат на ring_schema_flatten_verify. Шаг verify требует PostGIS по той же причине, что выше.

    Часто задаваемые вопросы

    Impact

    Теряю ли я данные, когда схему снова сплющивают?

    Нет. Сплющивание только переписывает файл schema.sql в репозитории. Живые базы оно никогда не трогает.

    Migration

    Мою базу создали из старого schema.sql. Какие файлы мне нужны?

    Сравните SELECT version FROM schema_versions с пронумерованными файлами, затем примените недостающие по порядку после бэкапа. Только некоторые файлы записывают версию (см. «Существующая база» выше), поэтому при сомнении проверяйте их таблицы. Обратите внимание: свежая установка из сегодняшнего schema.sql показывает версии до 045, хотя таблицы и индексы из 046 до 051 уже присутствуют.

    Ops

    Почему падает CREATE EXTENSION postgis?

    Ваша сборка PostgreSQL не включает PostGIS. Уберите эту строку, как показано в шаге 2, или используйте образ с PostGIS.

  9. Первый запуск. Ваш разработчик создаёт пустую базу и применяет schema.sql. Сайт готов к первому логину админа.
  10. Обновление платформы. Релиз Ring добавляет миграцию вроде 051_likes_uci_favorites_indexes.sql. Ваш разработчик делает бэкап, применяет этот один файл и передеплоит.
  11. После обновления что-то выглядит неправильно. Миграции 051 и новее могут иметь соответствующий .down.sql, чтобы изменение можно было откатить. Более старые файлы нет.
  12. Which schema path applies
    DB_HOST
    DB_PORT
    DB_NAME
    DB_USER
    DB_PASSWORD
    DB_SSL
    DATABASE_URL
    Environment

    Свежая установка

    1. 1

      Создайте пустую базу

      Следующий шаг выполняйте как суперпользователь или владелец базы, потому что schema.sql создаёт расширения.

    2. 2

      Примените schema.sql

      Если на сервере установлен PostGIS (например образ postgis/postgis), примените файл как есть:

      На обычном PostgreSQL сначала уберите строку PostGIS. Ни одна таблица не использует тип PostGIS, поэтому больше ничего не меняется:

    3. 3

      Проверьте результат

      Дайте роли приложения (DB_USER) доступ к схеме public, затем запустите приложение.

    Существующая база

    Применяйте только файлы, которых база ещё не видела. Некоторые миграции записывают себя в schema_versions через INSERT ... WHERE NOT EXISTS (016 до 025, 037, 043 до 046, 050, 051). Остальные этого не делают, поэтому перед применением проверяйте наличие таблиц или индексов, которые они создают.

    Чтобы откатить миграцию с down-файлом, примените 051_likes_uci_favorites_indexes.down.sql так же. Он также удаляет свою строку в schema_versions.

    Добавление миграции (для контрибьюторов)

    1. 1

      Напишите следующий пронумерованный файл

      Возьмите следующий свободный номер после самого высокого файла в data/migrations/. Сделайте его идемпотентным (IF NOT EXISTS), запишите в schema_versions и добавьте .down.sql, когда изменение обратимо.

    2. 2

      Пересоберите schema.sql

      Это запускает ring/scripts/flatten-schema-from-migrations.sh. Нужен локальный PostgreSQL, где ваша роль может создавать базы (PGHOST и PGUSER по умолчанию localhost и ring_user). Скрипт создаёт scratch-базу ring_schema_flatten, бэкапит schema.sql как schema.sql.bak-pre-flatten-<timestamp>, применяет предыдущую схему плюс все миграции кроме 001, дампит DDL плюс эталонные сиды и проверяет результат на ring_schema_flatten_verify. Шаг verify требует PostGIS по той же причине, что выше.

    Часто задаваемые вопросы

    Impact

    Теряю ли я данные, когда схему снова сплющивают?

    Нет. Сплющивание только переписывает файл schema.sql в репозитории. Живые базы оно никогда не трогает.

    Migration

    Мою базу создали из старого schema.sql. Какие файлы мне нужны?

    Сравните SELECT version FROM schema_versions с пронумерованными файлами, затем примените недостающие по порядку после бэкапа. Только некоторые файлы записывают версию (см. «Существующая база» выше), поэтому при сомнении проверяйте их таблицы. Обратите внимание: свежая установка из сегодняшнего schema.sql показывает версии до 045, хотя таблицы и индексы из 046 до 051 уже присутствуют.

    Ops

    Почему падает CREATE EXTENSION postgis?

    Ваша сборка PostgreSQL не включает PostGIS. Уберите эту строку, как показано в шаге 2, или используйте образ с PostGIS.