Перейти к содержанию

Подключение и работа в консоли

В данном разделе описаны способы подключения Picodata, а также первые шаги в консоли.

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

См. также:

Консоль администратора

Настройка и подключение

Консоль администратора предоставляет доступ к учетной записи Администратора СУБД (admin). Для запуска консоли используйте следующую команду с указанием файла unix-сокета:

picodata admin ./admin.sock

По умолчанию файл unix-сокета расположен в рабочей директории инстанса, указанной при запуске в параметре picodata run --data-dir. Путь к этому файлу можно переопределить параметром picodata run --admin-sock.

При успешном подключении отобразится приглашение:

$ picodata admin ./admin.sock
Connected to admin console by socket path "./admin.sock"
type '\help' for interactive help
picodata>

Консоль администратора интерпретирует вводимые команды на языке SQL.

Задание пароля администратора

По умолчанию у Администратора СУБД отсутствует пароль, поэтому подключиться к консоли администратора возможно только при наличии доступа к файлу сокета средствами ОС. Для того чтобы иметь возможность подключиться к инстансу по сети, задайте пароль администратора:

ALTER USER "admin" WITH PASSWORD 'T0psecret'

После этого Администратор СУБД сможет подключиться, используя следующую команду:

picodata connect admin@127.0.0.1:3301

Кроме того, задать пароль администратора можно при инициализации кластера, установив переменную окружения PICODATA_ADMIN_PASSWORD для его первого инстанса. При повторных запусках данная переменная будет игнорироваться.

См. также:

Создание учетной записи пользователя

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

CREATE USER "alice" WITH PASSWORD 'T0psecret';

Чтобы новый пользователь мог создавать таблицы, выдайте ему соответствующую привилегию:

GRANT CREATE TABLE TO "alice";

Автоматизация первичной настройки

Первичную настройку пользователей и их прав в консоли администратора можно автоматизировать. Для этого сохраните следующий набор команд в виде скрипта:

setup.sql
\set delimiter ;
ALTER USER "admin" WITH PASSWORD 'T0psecret';
CREATE USER "alice" WITH PASSWORD 'T0psecret';
GRANT CREATE TABLE TO "alice";
GRANT READ TABLE TO "alice";
GRANT WRITE TABLE TO "alice";

Запустите этот скрипт в консоли администратора:

picodata admin ./admin.sock < ../setup.sql

Пример вывода:

Connected to admin console by socket path "admin.sock"
type '\help' for interactive help
Delimiter changed to ';'
1
1
1
1
1
Bye

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

SQL-консоль

SQL-консоль позволяет выполнять распределенные SQL-команды в рамках кластера. После того как в системе создана пользовательская учетная запись, можно подключиться к SQL-консоли любого локального или удаленного инстанса. Для этого используйте команду picodata connect. Пример для 127.0.0.1:

picodata connect alice@127.0.0.1:3301

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

Перенаправление команд в консоли

При использовании административной или SQL-консоли поддерживается перенаправление ввода-вывода команд (pipe). Таким способом можно сделать как отдельный SQL-запрос, так и запустить файл со списком SQL-команд. Примеры:

Отдельная команда в SQL-консоли
echo "SELECT * FROM warehouse;" | picodata connect alice@127.0.0.1:3301
Список команд в административной консоли
cat file.sql  | picodata admin ./admin.sock
Пример файла с командами
\set delimiter ;
INSERT INTO customers VALUES (1, 'customer1');
SELECT name FROM customers limit 10;
DELETE FROM customers WHERE id > 100;

Встроенная справка в консоли

Встроенная справка Picodata доступна в административной и в SQL-консоли. Справка содержит информацию о дополнительных командах в консоли и поддерживаемых сочетаниях клавиш. Для вызова справки введите \help.

Дополнительные команды

В консоли Picodata доступны следующие дополнительные команды:

  • \e — открыть текстовый редактор по умолчанию (в соответствии с переменной EDITOR)
  • \set delimiter символ — задать символ для разделения строк
  • \set delimiter default — сбросить символ для разделения строк (перенос строки по нажатию Enter)

Сочетания клавиш

В консоли Picodata поддерживаются следующие сочетания клавиш:

  • Enter — завершение ввода
  • Alt+Enter — переход к новой строке
  • Ctrl+C — отмена ввода
  • Ctrl+D — выход из консоли

Протокол PostgreSQL

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

Настройка и подключение

Для включения протокола PostgreSQL укажите параметр picodata run --pg-listen при запуске инстанса Picodata:

picodata run --pg-listen 127.0.0.1:5432

Это позволит инстансу принимать подключения в качестве сервера PostgreSQL.

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

Подключитесь к Picodata через psql — интерактивный терминал PostgreSQL:

psql postgres://alice:T0psecret@127.0.0.1:5432?sslmode=disable

По умолчанию SSL для PostgreSQL-сервера в Picodata отключен, поэтому его также следует отключить на стороне psql, используя опцию sslmode.

Включение протокола SSL

Чтобы использовать протокол SSL при подключении к Picodata по протоколу PostgreSQL, необходимо сделать следующее:

  1. Задайте в файле конфигурации параметр instance.pg.ssl: true

  2. Добавьте в рабочую директорию инстанса <DATA_DIR> SSL-сертификат и ключ server.crt, server.key

Примеры запросов

Примеры запросов в интерактивной сессии psql:

Создание таблицы
postgres=> CREATE TABLE WAREHOUSE (
    W_ID INTEGER NOT NULL,
    W_NAME VARCHAR(10) NOT NULL,
    W_TAX DOUBLE,
    W_YTD DOUBLE,
    PRIMARY KEY (W_ID)
)
USING MEMTX DISTRIBUTED BY (W_ID);
CREATE TABLE
Вставка строк
postgres=> INSERT INTO WAREHOUSE (W_ID, W_NAME) VALUES (1, 'aaaa'), (2, 'aaab'), (3, 'aaac'), (4, 'aaad');
INSERT 0 4
Получение колонок
postgres=> SELECT W_ID, W_NAME FROM WAREHOUSE;
 "W_ID" | "W_NAME"
--------+----------
      1 | aaaa
      2 | aaab
      3 | aaac
      4 | aaad
(4 rows)
Получение колонок с условием
postgres=> SELECT W_NAME FROM WAREHOUSE WHERE W_ID=1;
 "W_NAME"
----------
 aaaa
(1 row)

Ограничения

  • Поступающие запросы без изменений передаются в Picodata в текстовом виде, поэтому возможно выполнение только поддерживаемых в Picodata запросов
  • Системные каталоги PostgreSQL реализованы частично
  • Подключение по протоколу PostgreSQL работает в режиме autocommit, т.к. Picodata не поддерживает интерактивные транзакции