Найти в Дзене

Копирование данных между таблицами в PostgreSQL

В PostgreSQL есть несколько способов копирования данных из одной таблицы в другую. Рассмотрим основные методы: sql INSERT INTO target_table SELECT * FROM source_table; INSERT INTO target_table (column1, column2, column3) SELECT column1, column2, column3 FROM source_table; INSERT INTO target_table SELECT * FROM source_table WHERE condition; CREATE TABLE new_table AS SELECT * FROM source_table; INSERT INTO schema1.target_table SELECT * FROM schema2.source_table; INSERT INTO target_table (id, name, processed_data) SELECT id, name, UPPER(data) FROM source_table; -- Экспорт в файл COPY source_table TO '/path/to/file.csv' WITH CSV HEADER; -- Импорт из файла COPY target_table FROM '/path/to/file.csv' WITH CSV HEADER; 1. Типы данных в исходной и целевой таблицах должны быть совместимы 2. При копировании в существующую таблицу убедитесь, что нет конфликтов с ограничениями (PRIMARY KEY, UNIQUE и т.д.) 3. Для больших таблиц используйте транзакции: BEGIN; INSERT INTO target_table SELECT * FROM so
Оглавление

В PostgreSQL есть несколько способов копирования данных из одной таблицы в другую. Рассмотрим основные методы:

1. Простое копирование всех данных

sql
INSERT INTO target_table
SELECT * FROM source_table;

2. Копирование с выбором конкретных столбцов

INSERT INTO target_table (column1, column2, column3)
SELECT column1, column2, column3
FROM source_table;

3. Копирование с условием WHERE

INSERT INTO target_table
SELECT * FROM source_table
WHERE condition;

4. Копирование с одновременным созданием таблицы (CREATE TABLE AS)

CREATE TABLE new_table AS
SELECT * FROM source_table;

5. Копирование данных между разными схемами

INSERT INTO schema1.target_table
SELECT * FROM schema2.source_table;

6. Копирование с преобразованием данных

INSERT INTO target_table (id, name, processed_data)
SELECT id, name, UPPER(data)
FROM source_table;

7. Использование команды COPY (для экспорта/импорта)

-- Экспорт в файл
COPY source_table TO '/path/to/file.csv' WITH CSV HEADER;
-- Импорт из файла
COPY target_table FROM '/path/to/file.csv' WITH CSV HEADER;

Важные замечания:

1. Типы данных в исходной и целевой таблицах должны быть совместимы

2. При копировании в существующую таблицу убедитесь, что нет конфликтов с ограничениями (PRIMARY KEY, UNIQUE и т.д.)

3. Для больших таблиц используйте транзакции:

BEGIN;
INSERT INTO target_table SELECT * FROM source_table;
COMMIT;

4. Если нужно заменить данные в целевой таблице, можно сначала очистить её:

TRUNCATE target_table;
INSERT INTO target_table SELECT * FROM source_table;

5. Для частичного обновления данных можно использовать INSERT ... ON CONFLICT:

INSERT INTO target_table
SELECT * FROM source_table
ON CONFLICT (id) DO UPDATE SET
column1 = EXCLUDED.column1,
column2 = EXCLUDED.column2;