Postgresql clients

Кому не надо переходить на Postgres

Итак, кому на Postgres переходить точно не нужно:

  • Первая причина – если вам сильно страшно. Если сильно боитесь Linux, текстовых конфигурационных файлов, а не не галочек и параметров в визуальной части как у MS Management Studio, вы сильно не готовы тратить на это хоть какое-то время, даже 2-3 дня – не надо. Тут работает принцип – лучше та СУБД, которую вы знаете. Знаете другую СУБД – не надо.

  • Второй момент – у вас есть лицензионный MS SQL, он работает и вы не собираетесь разворачивать новый продукт СУБД для новых инсталляций баз. Тут работает другой принцип: работает – не трогай. Не ожидайте, что после перехода с MS на Postgres будет взрывной рост производительности обе СУБД сейчас почти сравнялись по скорости в работе с 1С и показывают результаты +-10% на разных запросах. Начитаетесь вредных советов по настройке Postgres и примените все подряд, не разбираясь, зачем вы это сделали, а просто потому, что какому-то чуваку это помогло победить один отчет, а он просто не в курсе, что у него легла остальная система.

В общем, если страшно или все работает, спокойно работайте на MS SQL.

История PostgreSQL

СУБД PostgreSQL начиналась как исследовательский проект в Калифорний­ском университете в Беркли. С 1996 года она разрабатывалась сообществом, и до сих пор в разработке PostgreSQL принимают активное участие сообщества и университеты. Перечислим основные исторические вехи:

  • 1977-1985, проект IngresМайкл Стоунбрейкер (Michael Stonebraker) создал РСУБД на основе формальной реляционной модели;
  • 1986-1994, postgresМайкл Стоунбрейкер (Michael Stonebraker) создал postgres, чтобы поддержать сложные типы данных и объектно-реляци­онную модель;
  • 1995, Postgres95: Эндрю Ю (Andrew Yu) и Джолли Чен (Jolly Chen) моди­фицировали язык запросов PostQUEL, являвшийся частью postgres, пре­вратив его в расширенное подмножество SQL;
  • 1996, PostgreSQLгруппа разработчиков потратила много времени и труда, чтобы стабилизировать postgres95. Первая версия с открытым исходным кодом была выпущена 29 января 1997 года. Поскольку проект стал открытым и в него были добавлены новые возможности и дополне­ния, название postgres95 изменили на PostgreSQL.

Первая версия PostgreSQL имела номер 6, что можно оправдать нескольки­ми годами напряженных исследований и разработок. Будучи проектом с очень хорошей репутацией, PostgreSQL привлекла сотни разработчиков. В настоящее время PostgreSQL может похвастаться бесчисленными расширениями и очень активным сообществом.

Запрос данных из таблиц

Запросить все данные из таблицы:

SELECT * FROM table_name;

Запрос данных из указанных столбцов всех строк таблицы:

SELECT column_list
FROM table;

Запрашивает данные и выбирает только уникальные строки:

SELECT DISTINCT (column)
FROM table;

Запрашивает данные из таблицы с помощью фильтра:

SELECT *
FROM table
WHERE condition;

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

SELECT column_1 AS new_column_1, ...
FROM table;

Запрос данных с помощью оператора  

SELECT * FROM table_name
WHERE column LIKE '%value%'

Запрос данных с помощью оператора BETWEEN:

SELECT * FROM table_name
WHERE column BETWEEN low AND high;

Запрос данных с помощью оператора IN:

SELECT * FROM table_name
WHERE column IN (value1, value2,...);

Ограничение возвращаемых строк с помощью условия LIMIT:

SELECT * FROM table_name
LIMIT limit OFFSET offset
ORDER BY column_name;

Запрос данных из множества с использованием inner join, left join, full outer join, cross join и natural join:

SELECT * 
FROM table1
INNER JOIN table2 ON conditions
SELECT * 
FROM table1
LEFT JOIN table2 ON conditions
SELECT * 
FROM table1
FULL OUTER JOIN table2 ON conditions
SELECT * 
FROM table1
CROSS JOIN table2;
SELECT * 
FROM table1
NATURAL JOIN table2;

Возвращает количество строк таблицы.

SELECT COUNT (*)
FROM table_name;

Сортировка строк в порядке возрастания или убывания:

SELECT select_list
FROM table
ORDER BY column ASC , column2 ASC ,...;

Группировка строк с помощью

SELECT *
FROM table
GROUP BY column_1, column_2, ...;

Фильтруйте группы, используя

SELECT *
FROM table
GROUP BY column_1
HAVING condition;

Зайти в БД

Чтобы начать работу с базой данных нужно знать её имя, например
пусть Вам нужна база даныых, которую назвали просто HeiHei_ru_DB

Воспользуйтесь командой

\c HeiHei_ru_DB

You are now connected to database «HeiHei_ru_DB» as user «postgres».

Если вы работаете в

Linux

и база данных находится на том же хосте можно выполнить

psql -h 127.0.0.1 -d DATABASENAME -U DATABASEUSERNAME

Чтобы посмотреть список таблиц введите

\dt

List of relations
Schema | Name | Type | Owner
———+———+——-+———-
public | person | table | postgres
(1 row)

Чтобы посмотреть всю таблицу person уже можно использовать стандартный

SELECT * FROM person;

What is PostgreSQL?

PostgreSQL is a powerful, open source object-relational database system that uses and extends the SQL language combined with many features that safely store and scale the most complicated data workloads. The origins of PostgreSQL date back to 1986 as part of the POSTGRES project at the University of California at Berkeley and has more than 30 years of active development on the core platform.

PostgreSQL has earned a strong reputation for its proven architecture, reliability, data integrity, robust feature set, extensibility, and the dedication of the open source community behind the software to consistently deliver performant and innovative solutions. PostgreSQL runs on all major operating systems, has been ACID-compliant since 2001, and has powerful add-ons such as the popular PostGIS geospatial database extender. It is no surprise that PostgreSQL has become the open source relational database of choice for many people and organisations.

Getting started with using PostgreSQL has never been easier — pick a project you want to build, and let PostgreSQL safely and robustly store your data.

Миграция PostgreSQL

Когда вам требуется миграция

Существуют только две причины по которым вам необходимо выполнить миграцию: при переходе от одной главной версии к другой, например, от PostgreSQL 8.4.7 к 9.0.3, но не от 9.0.2 к 9.0.3; или при переключении с устаревшего формата временных меток с плавающей точкой к новому 64-битному целочисленному формату временных меток.

Миграция после версии 9.0

При обновлении с предыдущих версий файлов ebuild, а именно, версий после 8.4, прочитайте информацию, приведенную в начале данной статьи, перед тем, как осуществить миграцию.

С версией 9.0 и более поздними версиями поставляется новая утилита pg_upgrade, которая радикально упрощает процесс миграции.

Однако, имеются два предостережения при использовании утилиты . Во-первых, она не поддерживает файлы конфигурации, находящиеся в каталоге, отличном от того, где хранятся данные. Эту проблему можно решить использованием символьных ссылок. Во-вторых, вы можете использовать ее только для миграции с базы данных начиная с версии 8.3 или более новой. Если вы имеете более старую базу данных, вам нужно следовать инструкциям по миграции с установок, предшествующих версии 9.0.

Остановите серверы с которых и на которые вы собираетесь мигрировать:

ЗаметкаСимвольные ссылки уже существуют начиная с версии 9.4 и более.

Проверьте доступные версии и затем выберите вашу:

Измените метод аутентификации пользователя базы данных ‘postgres’ так, чтобы доверять локальным соединениям на всех базах данных:

Вам может потребоваться изменить разрешения на /var/lib/postgresql/ перед выполнением следующего шага.

ЗаметкаPostgreSQL до версии 9.4 использовал опцию вместо .

Выполните команды, которые требует запустить, если таковые имеются.

И вот все готово:

Миграция перед версией 9.0: с помощью новых ebuild-файлов

По той причине, что новые ebuild-файлы предлагают более совершенный метод слоттинга, чем предыдущие, время простоя довольно мало, скорее всего это будут минуты, нежели часы.

В следующих примерах предполагается, что вы используете местоположения и настройки портов по умолчанию, и что вы мигрируете с 8.3 на 8.4. Отрегулируйте их соответствующим образом, если вы отклонились от значений по умолчанию.

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

Необходимо отредактировать пару файлов перед началом миграции. Установите PGPORT в файле конфигурации /etc/conf.d/postgresql-8.4 на 6543. (Подойдет любой порт отличный от того, который привязан к предыдущей установке.)

Затем, отредактируйте /etc/postgresql-8.3/pg_hba.conf так, чтобы только суперпользователь базы данных postgres мог получить доступ к кластеру базы данных через доменный сокет Unix.

Следующие инструкции должны быть безопасны. Прочтите документацию, чтобы быть в этом уверенными.

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

Начинайте переправлять данные со старого кластера на новый кластер.

Установите PGPORT обратно на 5432.

Разрешите пользователям доступ еще один раз.

Надеемся, все прошло по плану и вы успешно обновили сервер, который содержит те же самые данные, точь-в-точь, как и старый сервер.

Миграция перед версией 9.0: со старых ebuild-файлов

Вам потребуется запланировать некоторое время простоя для вашего сервера. Старые ebuild-файлы не могут быть установлены в то же самое время, что и новые. Таким образом, заранее предположите, что сервер будет остановлен в течение нескольких часов. Даже, может быть, на все выходные.

Перед началом, вам понадобится запретить доступ к серверу, так, чтобы не сделать изменений. Вы также можете пожелать сделать резервное копирование postgresql.conf и pg_hba.conf и любого другого файла конфигурации, который вы считаете важным.

Следуйте шагам по установке и конфигурации сервера, описанным в подробностях в этой статье.

Бесплатный MS SQL vs бесплатный PostgreSQL

Нельзя сравнивать платный MS SQL – Standard и Enterprise – с бесплатным PostgreSQL, это не совсем корректное сравнение. Нельзя ожидать от бесплатного ПО такой же скорости, как и от платного, причем неслабо платного.

Давайте сравним бесплатную версию MS SQL Express и бесплатные версии PostgreSQL.

Бесплатные версии Postgres – это:

  • Самосборки, когда вы с сайта postgresql.org скачали исходники, добавили туда патчи для 1С и собрали свою сборку. Она бесплатна, пожалуйста, пользуйтесь.

  • То же самое можно сделать, скачав сборку, которую собрали специалисты фирмы «1С» с сайта – releases.1с.ru. Эта сборка будет отличаться от вашей самосборки тем, что она после сборки протестирована фирмой 1С.

  • Есть еще третий вариант – сайт 1с.postgres.ru. Это сборка от компании Postgres Professional – эта команда работает со своими серверами сборки, и они делают бесплатную версию для 1С. где в ванильную сборку добавляют несколько своих патчей, которые считают нужным. На то какие патчи они добавят, а какие – нет, мы с вами повлиять не можем. Но на моей практике сборка с 1с.postgres.ru работает намного стабильнее. Кто имеет доступ на партнерские форумы 1С, там есть несколько обращений, когда у людей сбоили самосборки или сборки с releases, при этом ставим сборки с 1с.postgres.ru с той же версией Postgres, и все отлично работает. Поэтому я бы советовал ставить отсюда.

Теперь давайте сравним бесплатные версии MS SQL Express и Postgres. Какие ограничения они накладывают:

  • На количество ядер.

    • MS SQL Express в последней поддерживаемой 1С 17 версии, позволяет использовать только 4 ядра.

    • бесплатный Postgres – безлимитное количество ядер.

  • То же самое по памяти.

    • MS SQL Express может использовать 1,5 Гб памяти и все.

    • Postgres – безлимитно.

  • Объем базы:

    • MS SQL Express – 10 Гб,

    • у Postgres – безлимитно.

  • Отказоустойчивость:

    • в MS SQL Express не поддерживается вообще.

    • В Postgres доступны логические и физические репликации любого уровня каскадирования. Вы можете одновременно делать с мастера десятки реплик. Или сделать реплику с мастера, а с реплики – еще одну (иногда это имеет смысл). Бесплатный Postgres позволит снимать бэкапы с реплики, не трогая этими задачами мастер.

    • Есть несколько важных моментов:

      • бэкап у MS SQL консистентен на момент окончания бэкапа, а бэкап Postgres’a (dump) консистентен на момент начала бэкапа.

      • Если вы сливаете этот dumpс мастера Postgres (с главного сервера), то в момент этого бэкапа вы не сможете произвести структурные изменения в 1С, так как они содержат в себе команды drop для таблиц либо удаления столбцов. Postgres не позволит изменить структуру данных в части удаления, пока он снимает dump. Этот момент нужно учитывать при проектировании системы.

  • Регламентные операции плюс бэкапы

    • На MS SQL Express регламенты можно делать только скриптами и cron. Нет там планировщика (агента SQL Server), его там не существует. Вы не сможете внутри SQL создать никаких расписаний или операций. Надо будет батнички нарисовать, засунуть это либо в cron, либо в планировщик Windows.

    • То же самое на Postgres, все регламентные операции, бэкапы и восстановления из бэкапов – это скрипты, cron или планировщик Windows, смотря в какой системе вы это делаете.

  • Ещё момент – бесплатные версии обоих продуктов не входят в список импортозамещающих продуктов. Компаниям госсектора эти базы данных запрещены в использовании вообще, не только в 1С.

  • Также на бесплатном Postgres и бесплатном MS SQL нет ФСТЭКа. Никто не получает сертификаты ФСТЭК на эти продукты. Забегая вперед, скажу, что и в платном MS SQL ФСТЭКа нет.

С бесплатными версиями все более менее понятно, поехали в платные версии.

Установка и настройка

В данном разделе представлена инструкция по установки и настройке PostgreSQL для разных ОС

Установка

Если установка происходит на macOS, то процесс установки можно запустить командой:

brew install postgresql

На Linux СУБД устанавливается так:

sudo apt-get install postgresql postgresql-contrib

После того, как все загружено и установлено, можно проверить, все ли в порядке, и какая стоит версия PostgreSQL. Для этого выполните следующую команду:

postgres --version

Инструкция по установке в цифровом формате



Настройка

Работа с PostgreSQL может быть произведена через командную строку (терминал) с использованием утилиты psql – инструмент командной строки PostgreSQL.

Необходимо ввести следующую команду:

psql postgres (для выхода из интерфейса используйте \q)

Этой командой запускается утилита psql. Хотя есть много сторонних инструментов для администрирования PostgreSQL, нет необходимости их устанавливать, т. к. psql удобен и отлично работает.

Если нужна помощь, введите (или ) в psql-терминале. Появится список всех доступных параметров справки. Вы можете ввести , если вам нужна помощь по конкретной команде. Например, если ввести в консоли psql, отобразится синтаксис команды .

 1 Description update rows of a table
 2  WITH  RECURSIVE  with_query [,  
 3 UPDATE  ONLY  table_name  *    AS  alias 
 4     SET { column_name = { expression | DEFAULT } |
 5           ( column_name [,  ) = ( { expression | DEFAULT } [,  ) |
 6           ( column_name [,  ) = ( sub-SELECT )
 7         } [, 
 8      FROM from_list 
 9      WHERE condition | WHERE CURRENT OF cursor_name 
10      RETURNING * | output_expression   AS  output_name  [,  

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

\list или \l

Рисунок 1 — Результат выполнения операции \l

На рисунке выше вы видите три базы данных по умолчанию и суперпользователя postgres, которые создаются при установке PostgreSQL.

Чтобы вывести список всех пользователей, выполните команду . Атрибуты пользователя postgres говорят нам, что он суперпользователь.

Рисунок 2 — Результат выполнения операции \du

О продукте

PostgreSQL поддерживается на всех современных Unix системах (34 платформы), включая наиболее распространенные, такие как Linux, FreeBSD, NetBSD, OpenBSD, SunOS, Solaris, DUX, а также под macOS. Начиная с версии 8.X PostgreSQL работает в «native» режиме под MS Windows NT, Win2000, WinXP, Win2003. Известно, что есть успешные попытки работать с PostgreSQL под Novell Netware 6 и OS2.

PostgreSQL неоднократно признавалась базой года, например, Linux New Media AWARD 2004, 2003 Editors’ Choice Awards, 2004 Editors’ Choice Awards.

PostgreSQL используется как полигон для исследований нового типа баз данных, ориентированных на работу с потоками данных — это проект TelegraphCQ, стартовавший в 2002 году в Беркли после успешного проекта Telegraph (название главной улицы в Беркли).

Запуск скрипта из файла

Сперва проверим, что с переменными окружения всё впорядке.

Для этого введём
в консоль psql.exe нажмём Enter и проверим что bash не жалуется на неизвестную команду.

Если жалуется — прочитайте мои советы в статье

Пишем скрипт
script.sql

Применим этот скрипт к базе данных
HeiHei_ru_DB

У меня postgres запущен локально на порту 5433. У Вас может быть
на 5432 — проверьте.

cat script.sql | psql.exe -h localhost -p5433 -U postgres HeiHei_ru_DB

Password for user postgres:

CREATE TABLE

Саме время сделать что-то более близкое к реальному скрипту

На поля таблицы нужно ввести некоторые ограничения и добавить им свойств.

Теперь запустим этот скрпит уже не в тестовую а в рабочую базу данных
heihei (которая совпадает с названием сайта HeiHei.ru,
но если написать .ru будет синтаксическая ошибка ERROR: syntax error at or near «.»)

cat booking_sites.sql | psql.exe -h localhost -p5433 -U postgres heihei

Password for user postgres:

CREATE TABLE

Изменение таблицы

Когда нужно обновить название столбца таблицы используем команду ALTER

Предположим полю website_url не хватает 50 символов. Увеличим длину до 60.

ALTER TABLE booking_sites ALTER column website_url TYPE VARCHAR(60);

Проверим изменилась ли таблица

\d booking_sites

Table «public.booking_sites»
Column | Type | Collation | Nullable | Default
—————-+————————+————+———-+——————————————-
id | bigint | | not null | nextval(‘booking_sites_id_seq’::regclass)
company_name | character varying(50) | | not null |
origin_country | character varying(50) | | not null |
age | character varying(3) | | not null |
date_of_birth | date | | not null |
website_url | character varying(60) | | |
Indexes:
«booking_sites_pkey» PRIMARY KEY, btree (id)

Notes

Using OIDs in new applications is not recommended: where
possible, using a SERIAL or other
sequence generator as the table’s primary key is preferred.
However, if your application does make use of OIDs to identify
specific rows of a table, it is recommended to create a unique
constraint on the oid column of that
table, to ensure that OIDs in the table will indeed uniquely
identify rows even after counter wraparound. Avoid assuming that
OIDs are unique across tables; if you need a database-wide unique
identifier, use the combination of tableoid and row OID for the purpose.

PostgreSQL automatically
creates an index for each unique constraint and primary key
constraint to enforce uniqueness. Thus, it is not necessary to
create an index explicitly for primary key columns. (See CREATE INDEX for more
information.)

Unique constraints and primary keys are not inherited in the
current implementation. This makes the combination of inheritance
and unique constraints rather dysfunctional.

Подключение к БД

Чтобы получить доступ к базам данных можно воспользоваться стандартной консолью psql.
Windows:

Если Вы хотите подключиться из

bash в Windows

не забудьте добавить местоположение
psql.exe
(у меня это C:\Program Files\PostgreSQL\12\bin) в PATH

Как это делается описано в статье

PATH

psql.exe -h localhost -p 5433 -U postgres

Linux:

sudo su — postgres

psql

psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1))
Type «help» for help.

Если БД на локальном хосте

psql -h 127.0.0.1 -d DATABASENAME -U DATABASEUSERNAME

Получить данные о подключении

\conninfo

You are connected to database «postgres» as user «postgres» via socket in «/var/run/postgresql» at port «5432».

Уникальный идентификатор

Имя Описание Пример
uuid 128-битное значение, генерируемое специальным алгоритмом, практически гарантирующим, что этим же алгоритмом оно не будет получено больше нигде в мире. Записывается в виде 32 шестнадцатеричных цифр, разделённых на несколько групп.  a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
# CREATE TABLE uid
(uid uuid, name varchar(15));

# INSERT INTO uid (uid, name) VALUES
(gen_random_uuid (), 'alex'), (gen_random_uuid (), 'bob'), (gen_random_uuid (), 'max');

# SELECT * FROM uid;
                 uid                  | name
--------------------------------------+------
 650d3f16-c81c-4bbb-83a8-1964a6d2912e | alex
 7eb5cf8e-9755-48b3-8e66-753a09c6a7ed | bob
 b7837e0a-3519-4812-89f1-c7a9784406a3 | max
(3 rows)

Функция gen_random_uuid () предназначена для генерирования уникального uuid. Хотя есть мизерная вероятность что будет сгенерирован неуникальный uuid.

Существуют и другие типы, например для хранения двоичных данных, json, массивов, xml и другой информации. Но так как я их не применял, то и описывать пока не буду.

Сводка

Имя статьи
Типы данных PostgreSQL

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

Рассмотрим основные типы

Платные версии MS SQL и PostgreSQL

Для многих стало неожиданностью, что Postgres стал платным и начал себя ценить. На слайде приведены цифры из открытого источника – из прайса фирмы «1С», скачивайте и сравнивайте, вдруг я где-то ошибся.

Давайте сравним, во сколько обойдется покупка MS SQL Enterprise сервера и Postgres Pro Enterprise сервера на 16 ядер. Мы видим, что:

  • лицензия MS SQL Enterprise – почти 6 млн.

  • лицензия на Postgres Pro Enterprise – 1,5 млн.

Postgres Pro Enterprise – это форк от компании Postgres Professional, который предназначен для работы на очень больших инсталляциях и тысячах пользователей.

Postgres Pro Enterprise не быстрее бесплатного Postgres, если в базу с бесплатной версией зашел один человек, и отчет формируется 1,5 часа, то и в Postgres Pro Enterprise он тоже будет формироваться 1,5 часа.

Да, Postgres Pro Enterprise имеет некоторые улучшения планировщика запросов для очень специфичных ситуаций, рожденных именно в 1С. Все остальные ситуации, характерные не для 1С, уже давно решены в ванильном Postgres, там проблем не бывает. Но поскольку у нас только в одной базе может быть 7 тысяч таблиц, 30 тысяч индексов, а еще мы любим, когда на один сервер приходится по 100 баз – в Postgres Pro Enterprise сделано несколько оптимизаций специально для таких случаев.

Остальные преимущества Postgres Pro Enterprise – это многопоточность и многопользовательность. А так же он может сжимать данные в 5-8 раз, и скорость многопоточной работы также возрастает.

Но я бы более корректно сравнил Postgres Pro Enterprise с MS SQL Standard. По набору функциональности MS SQL Standard аналогичен Postgres Pro Enterprise. Умеет делать такие же репликации, не имеет ограничений на ядра и на память… Если сравнивать так – цена почти одинаковая, 1,5 млн.

Есть еще Postgres Pro Standard. Эта сборка не Postgres Pro Enterprise, но уже и не бесплатная. Она не имеет нескольких функций, которые есть у Postgres Pro Enterprise, например, сжатие и PTRACK для pg_probackup. Но ценовая политика Postgres Pro такая, что для 1С Postgres Pro Standard дороже чем Postgres Pro Enterprise. Поэтому, если покупать, то покупать именно Postgres Pro Enterprise.

Теперь давайте посчитаем стоимость лицензий клиент+сервер на 50 пользователей.

С лицензированием на пользовательские места для MS SQL в прайсе 1С только одна позиция – это MS SQL Server Runtime, на нем можно запускать только 1С.

Стоимость клиентских лицензий и отдельного сервера для MS SQL Server Runtime и Postgres Pro Enterprise одинаковая: разница в 3-4 тысячи.

С ценами и возможностями бесплатных версий разобрались, теперь давайте пойдем дальше.

В моем понимании вот такая картинка символизирует мысли тех, кто находится на перепутье: идти ли на Postgres. Кажется, что с MS SQL все понятно, есть только маленькая кучка проблем, но мы знаем, как их решать. При этом с Postgres – кошмар, мы это никогда не разгребем.

Но это не так. На больших инсталляциях проблемы есть везде – и с MS SQL , и с PostgreSQL. Даже с платформой 1С у нас бывают проблемы, хотя, казалось бы, идеальный продукт ))).

Поэтому хочу немного развеять такое понимание проблем о возможных проблемах с СУБД. Начну с самого простого – с установки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector