Пример работы с таблицами ADB через psql
- Обзор
- Подключение к базе данных по умолчанию
- Шаг 1. Создание базы данных
- Шаг 2. Создание таблицы
- Шаг 3. Получение информации о таблицах
- Шаг 4. Вставка данных в таблицу
- Шаг 5. Чтение данных
- Шаг 6. Анализ запросов
- Шаг 7. Изменение таблицы
- Шаг 8. Обновление данных в таблице
- Шаг 9. Удаление данных из таблицы
- Шаг 10. Удаление таблицы
- Шаг 11. Удаление базы данных
Обзор
В статье описаны основные операции с таблицами, доступные в ADB. Синтаксис SQL в ADB совпадает с синтаксисом Greengage DB — СУБД, на которой ADB основана начиная с версии 6.29. Greengage DB, в свою очередь, наследует синтаксис SQL от PostgreSQL и дополняет его новыми возможностями, связанными с распределенной архитектурой. Полный список команд с описанием их параметров можно найти в документации Greengage DB.
Для работы с таблицами в ADB можно использовать стандартный терминальный клиент psql. Он позволяет вводить SQL-запросы, передавать их в ADB и просматривать результаты.
Для взаимодействия с ADB необходимо подключиться к хосту мастера, на котором утилита psql доступна после установки ADB.
Сегменты не предназначены для клиентских подключений.
Подключение к базе данных по умолчанию
Если вы не создавали баз данных в ADB, можно использовать базу данных по умолчанию — adb.
-
Подключитесь к хосту мастера ADB (например, по SSH) и войдите в систему под учетной записью
gpadmin, которая создается по умолчанию:$ sudo su - gpadmin -
Подключитесь к базе данных
adb:$ psql adb
При подключении к базе данных через psql выводится версия psql и приглашение, где указано имя текущей базы данных:
psql (9.4.26) Type "help" for help. adb=#
Для выхода из psql используйте следующую команду:
\q
В статье Использование psql для подключения к ADB приводится пример с удаленным подключением через psql, а также более подробная информация о базе данных по умолчанию.
Шаг 1. Создание базы данных
Для создания новой базы данных используйте команду CREATE DATABASE, введите имя базы данных и завершите команду точкой с запятой ;.
Следующий пример создает новую базу данных с именем universe:
CREATE DATABASE universe;
Несмотря на то что синтаксис этой команды идентичен PostgreSQL, внутри она работает иначе, поскольку мастер управляет распределенной транзакцией на всех сегментах для создания базы данных на каждом узле кластера ADB. После того как все сегменты выполнили операцию, мастер фиксирует успешное создание БД в служебных каталогах и отправляет результат клиенту:
CREATE DATABASE
Для переключения на только что созданную базу данных используйте команду \c:
\c universe
Результат:
You are now connected to database "universe" as user "gpadmin". universe=#
|
РЕКОМЕНДАЦИЯ
Для мониторинга сессий, транзакций и SQL-команд ADB можно использовать ADB Control. Чтобы новая база данных учитывалась в мониторинге ADB Control, укажите ее в разделе Databases monitoring в веб-интерфейсе ADB Control. |
Шаг 2. Создание таблицы
Для создания новой таблицы используйте команду CREATE TABLE, укажите имя таблицы, опишите все столбцы таблицы (указав их имена и типы данных) и завершите команду точкой с запятой ;.
Кроме того, в отличие от стандартного синтаксиса PostgreSQL, каждая таблица в ADB имеет политику распределения (distribution policy), которая определяет, как строки распределяются между узлами сегментов.
Если при создании таблицы не указано выражение DISTRIBUTED BY, конфигурационный параметр сервера gp_create_table_random_default_distribution определяет способ распределения таблиц по умолчанию.
Для демонстрации поведения по умолчанию следующая команда создает таблицу missions без указания политики распределения:
CREATE TABLE missions (
planet_id INTEGER,
planet_name TEXT,
program_name TEXT,
launch_year INTEGER
);
Результат:
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'planet_id' as the Greengage Database data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. CREATE TABLE
Поскольку выражение DISTRIBUTED BY не указано, ADB использует первый столбец, к которому можно применить хеш-функцию, — в нашем случае planet_id.
Распределение таблицы по столбцу planet_id означает, что при добавлении или обновлении строки база данных применяет хеш-функцию к значению planet_id этой строки, и полученный хеш определяет, какой сегмент будет хранить данную строку.
Следующая команда создает таблицу, в которой первый столбец не является хешируемым:
CREATE TABLE planet_locations (
coord POINT,
planet_id INT,
name TEXT
);
Поскольку тип POINT не является хешируемым, ADB автоматически пропускает первый столбец и в качестве ключа распределения выбирает следующий подходящий столбец (в данном примере — planet_id типа INT):
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'planet_id' as the Greengage Database data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. CREATE TABLE
Автоматический выбор ключа распределения может подойти, но рекомендуется явно указывать ключ распределения с помощью DISTRIBUTED BY.
Продуманная политика распределения поможет избежать перекоса данных на сегментах и неоптимальных планов выполнения запросов.
Следующая команда создает таблицу с ключом распределения, явно заданным в выражении DISTRIBUTED BY:
CREATE TABLE moons (
planet_id INT,
moon_id INT,
moon_name TEXT,
diameter_km NUMERIC,
coord POINT
)
DISTRIBUTED BY (moon_id);
Результат:
CREATE TABLE
Подробнее о распределении данных см. в статье Распределение данных.
Создание append-optimized таблиц
По умолчанию, если тип таблицы не указан, ADB создает heap-таблицу. Конфигурационный параметр сервера gp_default_storage_options управляет поведением по умолчанию в этом случае.
Heap-таблицы используются для OLTP-нагрузки, когда данные часто меняются.
Например, если вы часто обновляете координаты планет в таблице planet_locations (созданной выше), heap-таблицы эффективно обрабатывают такие обновления.
Для аналитических нагрузок с массовой загрузкой данных и нечастыми обновлениями ADB поддерживает append-optimized (AO) таблицы с опциональным колоночным хранением и сжатием.
Подробнее о heap и append-optimized таблицах см. в статье Типы таблиц.
Для создания append-optimized таблицы передайте параметр хранения appendoptimized = true в выражении WITH.
CREATE TABLE planets (
planet_id INT,
name TEXT,
type TEXT,
mass_kg NUMERIC,
diameter_km NUMERIC,
distance_au NUMERIC,
orbit_days NUMERIC
) WITH (
appendoptimized = true
);
В отличие от heap-таблиц, которые имеют только строковую форму хранения данных (row-oriented), append-optimized таблицы могут быть строковыми или колоночными (column-oriented). Если ориентация не указана (как в примере выше), по умолчанию создается строковая таблица. Используйте строковую ориентацию, если ожидается небольшое количество строк, а запросы часто извлекают большинство столбцов.
Если ожидается большое количество строк, а один запрос затрагивает небольшое подмножество столбцов, используйте колоночную ориентацию, указав orientation = column.
Следующая команда создает append-optimized таблицу с колоночным хранением:
CREATE TABLE stars (
star_id BIGINT,
designation TEXT,
distance NUMERIC,
temperature_k INTEGER,
luminosity_sun NUMERIC,
radius_sun NUMERIC
) WITH (
appendoptimized = true,
orientation = column
)
DISTRIBUTED BY (star_id);
Создание партиционированных таблиц
Партиционирование разделяет большую таблицу на меньшие, более удобные для управления части (партиции), что повышает производительность запросов и упрощает обслуживание. Подробнее о партиционировании см. в статье Партиционирование.
Обратите внимание: то, является ли таблица партиционированной, определяется при ее создании. Добавлять партиции к таблице (с помощью команды ALTER TABLE) можно только в том случае, если она была определена как партиционированная.
Для создания партиционированной таблицы используйте выражение PARTITION BY <partition_type>, где значение <partition_type> может быть LIST (партиции основаны на списке значений) или RANGE (партиции основаны на числовом диапазоне или диапазоне дат).
Следующая команда создает таблицу missions_partitioned с партициями на основе диапазона лет:
CREATE TABLE missions_partitioned (
mission_id INTEGER,
planet_id INTEGER,
planet_name TEXT,
program_name TEXT,
launch_year INTEGER
) DISTRIBUTED BY (planet_id)
PARTITION BY RANGE (launch_year)
(
PARTITION p2020_2029 START (2020) END (2030),
PARTITION p2030_2039 START (2030) END (2040),
PARTITION p2040_plus START (2040) END (9999)
);
В выводе будет показано создание каждой физической таблицы-партиции:
NOTICE: CREATE TABLE will create partition "missions_partitioned_1_prt_p2020_2029" for table "missions_partitioned" NOTICE: CREATE TABLE will create partition "missions_partitioned_1_prt_p2030_2039" for table "missions_partitioned" NOTICE: CREATE TABLE will create partition "missions_partitioned_1_prt_p2040_plus" for table "missions_partitioned"
Шаг 3. Получение информации о таблицах
Для вывода списка всех таблиц в базе данных используйте метакоманду \dt.
С ее помощью, например, можно проверить типы хранения таблиц:
List of relations Schema | Name | Type | Owner | Storage --------+------------------+-------+---------+---------------------- public | planet_locations | table | gpadmin | heap public | missions | table | gpadmin | heap public | moons | table | gpadmin | heap public | planets | table | gpadmin | append only public | stars | table | gpadmin | append only columnar
Также обратите внимание, что поскольку имя схемы не было указано при создании таблиц, все они принадлежат текущей схеме (public).
Подробнее о схемах см. в статье Схемы.
Для просмотра информации о таблице используйте метакоманду \d с указанием имени таблицы:
\d planets
Вывод должен выглядеть подобным образом:
Append-Only Table "public.planets" Column | Type | Modifiers -------------+---------+----------- planet_id | integer | name | text | type | text | mass_kg | numeric | diameter_km | numeric | distance_au | numeric | orbit_days | numeric | Compression Type: None Compression Level: 0 Block Size: 32768 Checksum: t Distributed by: (planet_id)
Вы также можете использовать \d+ <имя_таблицы> для получения дополнительной информации о таблице, такой как тип хранения и сжатия и комментарии к столбцам:
\d+ planets
Результат должен выглядеть подобным образом:
Append-Only Table "public.planets" Column | Type | Modifiers | Storage | Stats target | Description -------------+---------+-----------+----------+--------------+------------------------------------------ planet_id | integer | | plain | | name | text | | extended | | Planet name (e.g., "Mars" or "Tatooine") type | text | | extended | | mass_kg | numeric | | main | | diameter_km | numeric | | main | | distance_au | numeric | | main | | orbit_days | numeric | | main | | Compression Type: None Compression Level: 0 Block Size: 32768 Checksum: t Distributed by: (planet_id) Options: appendonly=true, orientation=row
Шаг 4. Вставка данных в таблицу
Для добавления новых данных в таблицу используйте команду INSERT INTO, укажите имя таблицы и имена столбцов, определите значения столбцов после ключевого слова VALUES и завершите команду точкой с запятой ;.
Значения должны быть указаны в том же порядке, что и имена столбцов.
Следующий пример показывает, как вставить шесть новых строк в таблицу planets:
INSERT INTO planets (planet_id, name, type, mass_kg, diameter_km, distance_au, orbit_days)
VALUES
(1, 'Mercury', 'Terrestrial', 3.3011e23, 4879, 0.387, 88.0),
(2, 'Venus', 'Terrestrial', 4.8675e24, 12104, 0.723, 224.7),
(3, 'Earth', 'Terrestrial', 5.9722e24, 12742, 1.000, 365.25),
(4, 'Mars', 'Terrestrial', 6.4171e23, 6779, 1.524, 687.0),
(5, 'Jupiter', 'Gas giant', 1.8982e27, 139820, 5.203, 4331),
(6, 'Tatooine', 'Desert', 4.5722e24, 10465, 1.800, 525.0);
Результат:
INSERT 0 6
В этом выводе 6 — это количество добавленных строк, а 0 означает, что строкам не был присвоен идентификатор объекта (OID), так как по умолчанию OID отключены в ADB (их использование не рекомендуется для пользовательских таблиц).
Имена столбцов можно опустить — в этом случае значения необходимо указывать в том же порядке, что и столбцы таблицы:
INSERT INTO missions VALUES
(4, 'Mars', 'Ares Horizon', 2033),
(5, 'Jupiter', 'Ganymede Orbiter', 2037);
Шаг 5. Чтение данных
Для чтения данных из таблицы используйте команду SELECT, затем укажите имена столбцов, напишите имя таблицы после ключевого слова FROM, опишите условия запроса в выражении WHERE и завершите команду точкой с запятой ;.
Выборка всех данных
Для получения всех столбцов используйте * вместо имен столбцов:
SELECT * FROM planets;
Следующая команда делает то же, что и команда выше (но не может быть объединена с выражением WHERE):
TABLE planets;
Выборка определенных столбцов
Для получения определенных столбцов укажите их имена после SELECT.
В следующем примере используется системный столбец gp_segment_id (доступен во всех таблицах, кроме созданных с DISTRIBUTED REPLICATED) для определения того, какой сегмент хранит каждую строку:
SELECT gp_segment_id, planet_id, name
FROM planets
ORDER BY planet_id;
В выводе столбец gp_segment_id идентифицирует сегменты:
gp_segment_id | planet_id | name
---------------+-----------+----------
4 | 1 | Mercury
9 | 2 | Venus
7 | 3 | Earth
14 | 4 | Mars
2 | 5 | Jupiter
6 | 6 | Tatooine
(6 rows)
Фильтрация данных
Если необходимо отфильтровать строки по заданным условиям, используйте выражение WHERE.
Например, можно использовать оператор равенства (=) для поиска по конкретному значению:
SELECT * FROM planets
WHERE type = 'Gas giant';
Вывод содержит только строки, в которых указанный столбец имеет заданное значение:
planet_id | name | type | mass_kg | diameter_km | distance_au | orbit_days
-----------+---------+-----------+------------------------------+-------------+-------------+------------
5 | Jupiter | Gas giant | 1898200000000000000000000000 | 139820 | 5.203 | 4331
(1 row)
Также можно использовать операторы сравнения < и > с числовыми значениями, например:
SELECT name, diameter_km
FROM planets
WHERE diameter_km < 1e4;
Вывод содержит только планеты с диаметром менее 10000 километров:
name | diameter_km ---------+------------- Mars | 6779 Mercury | 4879 (2 rows)
В WHERE также могут использоваться математические и строковые функции и операторы.
Для объединения условий используйте логические операторы AND или OR.
Следующая команда показывает, как таблицы распределены по файлам данных на хостах.
Она получает данные из таблицы db_files_current из схемы arenadata_toolkit, предоставляемой ADB:
SELECT content, address, table_name, file_size, file
FROM arenadata_toolkit.db_files_current
WHERE table_schema = 'public'
AND table_name IN ('planets', 'stars', 'planet_locations')
AND file_size != 0;
Результат должен выглядеть подобным образом:
content | address | table_name | file_size | file
---------+-------------+------------+-----------+-------------------------------------------
2 | val-6-sdw-1 | planets | 88 | /data1/primary/gpseg2/base/67705/58277.1
4 | val-6-sdw-2 | planets | 88 | /data1/primary/gpseg4/base/67705/58277.1
6 | val-6-sdw-2 | planets | 88 | /data1/primary/gpseg6/base/67705/58277.1
7 | val-6-sdw-2 | planets | 88 | /data1/primary/gpseg7/base/67705/58277.1
9 | val-6-sdw-3 | planets | 88 | /data1/primary/gpseg9/base/67705/66449.1
14 | val-6-sdw-4 | planets | 88 | /data1/primary/gpseg14/base/67705/66449.1
(6 rows)
Дополнительные примеры использования команды SELECT см. в документации Greengage DB.
Объединение данных из разных таблиц
Когда связанные данные распределены по нескольким таблицам, можно использовать JOIN для объединения строк из разных таблиц.
Следующая команда объединяет данные из таблицы missions с таблицей planets, чтобы показать планеты, для которых существуют миссии:
SELECT p.name,
(m.program_name IS NOT NULL) AS has_mission
FROM planets p
LEFT JOIN missions m ON p.planet_id = m.planet_id;
Вывод показывает t (true) для планет, у которых есть миссии, и f (false) для планет, у которых их нет:
name | has_mission ----------+------------- Tatooine | f Mars | t Jupiter | t Venus | f Earth | f Mercury | f (6 rows)
В приведенном примере запрос с LEFT JOIN возвращает все строки из левой таблицы (planets), даже если в правой таблице (missions) нет совпадений.
В отличие от него, запрос с [INNER] JOIN возвращает только строки с совпадающими значениями — то есть только те планеты, у которых есть миссии:
SELECT p.name
FROM planets p
JOIN missions m ON p.planet_id = m.planet_id;
Результат:
name --------- Jupiter Mars (2 rows)
Подробнее о типах JOIN см. в документации Greengage DB.
Группировка результатов
Для группировки строк с одинаковыми значениями в указанных столбцах используйте выражение GROUP BY.
Обычно оно используется вместе с агрегатными функциями, такими как COUNT() или SUM().
Приведенная ниже команда возвращает количество планет каждого типа:
SELECT type, COUNT(*) AS planet_count
FROM planets
GROUP BY type;
Результат:
type | planet_count -------------+-------------- Desert | 1 Gas giant | 1 Terrestrial | 4 (3 rows)
Сортировка результатов
Если сортировка не используется, порядок строк, возвращаемых одним и тем же запросом, может различаться между выполнениями.
Чтобы порядок строк в выводе был предсказуемым, используйте выражение ORDER BY.
Следующий запрос сортирует группы по типу планеты в порядке убывания количества строк в группе:
SELECT type, COUNT(*) AS planet_count
FROM planets
GROUP BY type
ORDER BY planet_count DESC;
Результат:
type | planet_count -------------+-------------- Terrestrial | 4 Gas giant | 1 Desert | 1 (3 rows)
Шаг 6. Анализ запросов
Чтобы понять, как ADB выполняет запрос, и выявить потенциальные проблемы с производительностью, используйте команду EXPLAIN. Она показывает план запроса — последовательность операций, которые будет выполнять ADB, включая перемещение данных между сегментами.
В выводе команды обратите внимание на узлы перемещения (motion nodes):
-
Broadcast Motion— каждый сегмент отправляет копию таблицы всем сегментам. -
Redistribute Motion— каждый сегмент отправляет каждую строку одному целевому сегменту. -
Gather Motion— мастер собирает строки с сегментов (обычно это заключительный этап).
Следующий запрос анализирует выполнение команды SELECT с соединением (JOIN) по planet_id из обеих таблиц:
EXPLAIN
SELECT p.name,
(m.program_name IS NOT NULL) AS has_mission
FROM planets p
LEFT JOIN missions m ON p.planet_id = m.planet_id;
Результат должен выглядеть подобным образом:
QUERY PLAN
-------------------------------------------------------------------------------------
Gather Motion 16:1 (slice1; segments: 16) (cost=0.00..862.00 rows=10 width=9)
-> Result (cost=0.00..862.00 rows=1 width=9)
-> Hash Left Join (cost=0.00..862.00 rows=1 width=23)
Hash Cond: (p.planet_id = m.planet_id)
-> Seq Scan on planets p (cost=0.00..431.00 rows=1 width=11)
-> Hash (cost=431.00..431.00 rows=1 width=20)
-> Seq Scan on missions m (cost=0.00..431.00 rows=1 width=20)
Optimizer: Pivotal Optimizer (GPORCA)
(8 rows)
Поскольку обе таблицы используют один и тот же ключ распределения (planet_id), каждый сегмент может выполнить соединение локально, используя только те данные, которые он уже хранит.
Дополнительная пересылка строк между сегментами не требуется.
Следующий запрос анализирует команду SELECT с соединением (JOIN) по name из обеих таблиц:
EXPLAIN
SELECT p.name,
(m.program_name IS NOT NULL) AS has_mission
FROM planets p
LEFT JOIN missions m ON p.name = m.planet_name;
Результат должен выглядеть подобным образом:
QUERY PLAN
-------------------------------------------------------------------------------------------------------------
Gather Motion 16:1 (slice2; segments: 16) (cost=0.00..862.00 rows=10 width=9)
-> Result (cost=0.00..862.00 rows=1 width=9)
-> Hash Left Join (cost=0.00..862.00 rows=1 width=23)
Hash Cond: (p.name = m.planet_name)
-> Seq Scan on planets p (cost=0.00..431.00 rows=1 width=7)
-> Hash (cost=431.00..431.00 rows=3 width=22)
-> Broadcast Motion 16:16 (slice1; segments: 16) (cost=0.00..431.00 rows=3 width=22)
-> Seq Scan on missions m (cost=0.00..431.00 rows=1 width=22)
Optimizer: Pivotal Optimizer (GPORCA)
(9 rows)
Поскольку ключ распределения — planet_id, а не name, то строки с одинаковым значением name могут находиться на разных сегментах.
Чтобы каждый сегмент имел все необходимые строки для выполнения соединения по name, применяется операция Broadcast Motion: каждый сегмент отправляет свои строки всем остальным сегментам.
Для больших таблиц в production-среде лишнее перемещение данных может быть дорогостоящим, поэтому выбор правильного ключа распределения важен для производительности запросов.
|
РЕКОМЕНДАЦИЯ
Если вы используете ADB Control, можно воспользоваться страницей Monitoring для просмотра графического представления плана запроса, времени выполнения и статуса узлов плана. |
Шаг 7. Изменение таблицы
Для изменения таблицы используйте команду ALTER TABLE. Эта команда позволяет переименовывать таблицу, добавлять, удалять и переименовывать столбцы, изменять партиции, менять ограничения (constraint) и многое другое. В этом разделе приводятся примеры добавления и удаления ограничения, а также добавления столбца.
Добавление ограничения
Следующая команда добавляет ограничение CHECK для проверки диаметра планеты:
ALTER TABLE planets
ADD CONSTRAINT diameter_check CHECK (diameter_km > 0);
Результат:
ALTER TABLE
При добавлении ограничения CHECK ADB выполняет проверку, чтобы убедиться, что все текущие строки таблицы удовлетворяют новому ограничению.
С помощью опции NOT VALID эту начальную проверку можно пропустить.
Ограничение применяется к будущим добавлениям и обновлениям строк: попытки добавить планету с диаметром, меньшим или равным 0, приведут к ошибке: new row for relation "planets" violates check constraint "diameter_check".
После создания ограничение можно переименовать или удалить, но нельзя изменить его условие.
Удаление ограничения
Следующая команда удаляет ограничение diameter_check:
ALTER TABLE planets
DROP CONSTRAINT diameter_check;
Результат:
ALTER TABLE
Добавление столбца
Следующая команда добавляет новый столбец discovered_year в таблицу planets:
ALTER TABLE planets
ADD COLUMN discovered_year INTEGER;
Результат:
ALTER TABLE
Все существующие строки будут иметь значение NULL в новом столбце discovered_year.
Обратите внимание, что в ADB 6 (как и в Greengage DB 6) опция ADD COLUMN требует перезаписи таблицы для строковых таблиц.
Для больших таблиц это может занять значительное время.
Шаг 8. Обновление данных в таблице
Для обновления одного или нескольких столбцов в указанных строках таблицы используйте команду UPDATE.
Столбцы, которые нужно изменить, указываются в выражении SET.
Строки, которые нужно изменить, можно ограничить с помощью условия WHERE.
Если WHERE не указано, операция обновления применяется ко всем строкам таблицы.
Следующая команда изменяет значение diameter_km для планет типа Terrestrial:
UPDATE planets SET diameter_km = diameter_km - 1 WHERE type = 'Terrestrial';
Вывод показывает количество обновленных строк:
UPDATE 4
Следующая команда добавляет (visited) к планетам, у которых есть миссии, используя данные из таблицы missions:
UPDATE planets
SET name = name || ' (visited)'
WHERE planet_id IN (SELECT DISTINCT planet_id FROM missions);
Вывод показывает количество обновленных строк:
UPDATE 2
Проверьте результаты:
SELECT name FROM planets;
Результат должен быть:
name ------------------- Venus Mercury Tatooine Mars (visited) Jupiter (visited) Earth (6 rows)
Шаг 9. Удаление данных из таблицы
Для удаления одной или нескольких строк из таблицы используйте команду DELETE FROM, укажите имя таблицы, опишите условия запроса в выражении WHERE и завершите команду точкой с запятой ;.
Следующая команда удаляет строки, содержащие постфикс (visited) в столбце name:
DELETE FROM planets
WHERE name LIKE '% (visited)';
Вывод показывает количество удаленных строк:
DELETE 2
Обратите внимание, что пропуск выражения WHERE приведет к удалению всех строк из таблицы.
Очистка таблицы
Для удаления всех данных из таблицы используйте команду TRUNCATE и укажите имя таблицы.
TRUNCATE работает быстрее, чем DELETE, что делает ее предпочтительным выбором для очистки больших таблиц.
Следующая команда удаляет все строки из таблицы planets:
TRUNCATE planets;
Результат:
TRUNCATE TABLE
Для очистки нескольких таблиц одновременно перечислите их имена через запятую в одной команде TRUNCATE, например:
TRUNCATE missions, stars;
|
ВАЖНО
В отличие от Строки, удаленные с помощью Подробнее об освобождении дискового пространства, включая просмотр "мертвых" строк в таблице и проверку таблиц на раздувание (bloat), см. документацию Greengage DB. |
Шаг 10. Удаление таблицы
Для удаления таблицы из базы данных используйте команду DROP TABLE и укажите имя таблицы.
Следующая команда удаляет таблицу planets:
DROP TABLE planets;
Результат:
DROP TABLE
Для удаления нескольких таблиц одновременно перечислите их имена через запятую в одной команде DROP TABLE, например:
DROP TABLE missions, stars;
Шаг 11. Удаление базы данных
Чтобы удалить базу данных, используйте команду DROP DATABASE. Обратите внимание, что базу данных нельзя удалить, если к ней есть активные клиентские подключения.
-
Переключитесь на другую базу данных:
\c adb -
Введите
DROP DATABASEи имя базы данных:
DROP DATABASE universe;
Результат:
DROP DATABASE