Ошибка нет данных для столбца postgresql

  • ОБНОВЛЕНИЕ — это официальные данные, которые правительство этоs offering, and itдействительно ужасно Нет UTF8, битые строки из того, что я вижу http://data.gov.ro/storage/f/2013-11-01T13:59:27.012Z/contracte-2007.csv

CREATE TABLE код

CREATE TABLE contracte (
  castigator text,
  castigatorcui text,
  castigatortara text,
  castigatorlocalitate text,
  castigatoradresa text,
  tip text,
  tipcontract text,
  tipprocedura text,
  autoritatecontractanta text,
  autoritatecontractantacui text,
  tipac text,
  tipactivitateac text,
  numaranuntatribuire text,
  dataanuntatribuire text,
  tipincheierecontract text,
  tipcriteriiatribuire text,
  culicitatieelectronica text,
  numaroferteprimite text,
  subcontractat text,
  numarcontract text,
  datacontract text,
  titlucontract text,
  valoare text,
  moneda text,
  valoareron text,
  valoareeur text,
  cpvcodeid text,
  cpvcode text,
  numaranuntparticipare text,
  dataanuntparticipare text,
  valoareestimataparticipare text,
  monedavaloareestimataparticipare text,
  fonduricomunitare text,
  tipfinantare text,
  tiplegislatieid text,
  fondeuropean text,
  contractperiodic text,
  depozitegarantii text,
  modalitatifinantare text
);

Код SQL

COPY contracte(Castigator,CastigatorCUI,CastigatorTara,CastigatorLocalitate,
   CastigatorAdresa,Tip,TipContract,TipProcedura,AutoritateContractanta,
   AutoritateContractantaCUI,TipAC,TipActivitateAC,NumarAnuntAtribuire,DataAnuntAtribuire,
   TipIncheiereContract,TipCriteriiAtribuire,CuLicitatieElectronica,NumarOfertePrimite,
   Subcontractat,NumarContract,DataContract,TitluContract,Valoare,Moneda,ValoareRON,
   ValoareEUR,CPVCodeID,CPVCode,NumarAnuntParticipare,DataAnuntParticipare,
   ValoareEstimataParticipare,MonedaValoareEstimataParticipare,FonduriComunitare,
   TipFinantare,TipLegislatieID,FondEuropean,ContractPeriodic,DepoziteGarantii,
   ModalitatiFinantare) 
FROM 'C:\\Sinaia\SEAP 2007-2015\contracte-2009.csv'
WITH DELIMITER '^'encoding 'WIN1252' NULL AS '/N';

Ошибка, которую я получаю:

ERROR:  missing data for column "tip"
    CONTEXT:  COPY contracte, line 5312: "SC EUROSTRADE 
    SRL^7695851^Romania^Jilava^sediul social- Comuna Comana, Judetul Giurgiu"
    ********** Error **********

ERROR: missing data for column "tip"
SQL state: 22P04
Context: COPY contracte, line 5312: "SC EUROSTRADE SRL^7695851^Romania^Jilava^sediul social- Comuna Comana, Judetul Giurgiu"

Если я пытаюсь добавить заголовок CSV, я получаю другую ошибку

ERROR:  extra data after last expected column
CONTEXT:  COPY contracte, line 5209: "S.C. ELECTRA LUC S.R.L.^12094467^Romania^Bucuresti^Bucuresti, str. Vasile Lascar nr. 165, sector 2^A..."
********** Error **********

2016-02-27 12:03

1
ответ

Дело не в правильной или неправильной команде, проблема в качестве данных

когда я бегу

\COPY contracte (Castigator,CastigatorCUI,CastigatorTara,CastigatorLocalitate,CastigatorAdresa,Tip,TipContract,TipProcedura,AutoritateContractanta,AutoritateContractantaCUI,TipAC,TipActivitateAC,NumarAnuntAtribuire,DataAnuntAtribuire,TipIncheiereContract,TipCriteriiAtribuire,CuLicitatieElectronica,NumarOfertePrimite,Subcontractat,NumarContract,DataContract,TitluContract,Valoare,Moneda,ValoareRON,ValoareEUR,CPVCodeID,CPVCode,NumarAnuntParticipare,DataAnuntParticipare,ValoareEstimataParticipare,MonedaValoareEstimataParticipare,FonduriComunitare,TipFinantare,TipLegislatieID,FondEuropean,ContractPeriodic,DepoziteGarantii,ModalitatiFinantare) 
FROM 'contracte-2007.csv' 
( format csv, header, delimiter '^', encoding 'win1252', null '/N' );

я получил

ERROR:  missing data for column "subcontractat"
CONTEXT:  COPY contracte, line 8659: "INSTITUTUL NATIONAL CERCETARE DEZVOLTARE PTR.PROTECTIA MUNCII-INCDPM,,ALEXANDRU DARABONT"^1558391^Ro..."

Как видите, это строка 8659.

2016-03-01 11:30

В настоящее время я работаю над созданием автоматизированного генератора таблиц в Mathematica, который берет большой csv и разбивает его пополам, чтобы избежать ограничения столбцов в таблицах в Postgres.

Я проинструктировал таблицы, чтобы каждый столбец принимал нулевые значения из-за пустых столбцов здесь и там, но когда я отправляю команду copy, он действует и жалуется, что некоторые столбцы пусты в самом конце 2-го файла.

Ранее в CSV-файле есть другие пустые столбцы, на которые он не жалуется, и редактирование рассматриваемого столбца в CSV-файле также не устраняет (или не изменяет) ошибку.

Текущая команда гласит:

psql -c copy table_name FROM 'file_pathfile_name.csv' WITH DELIMITER ',' NULL '' CSV HEADER

Ошибка гласит:

Ошибка: отсутствуют данные для столбца «имя_столбца»

Контекст: COPY имя_таблицы, строка 2: «1,2,3,…»

2 ответа

После небольшого поиска количество столбцов в таблице действительно не соответствует количеству в csv. Это означает, что список имен столбцов, который мне предоставили (из CSV-файла, который давал сводную информацию о том, для чего предназначен каждый столбец), включал те, которые не были оставлены пустыми, но даже не использовались в основном файле.

Это я могу просто обвинить в небрежности поставщика данных и обойти это.

Но я сбит с толку, почему для их заполнения потребовались другие столбцы вместо значений по умолчанию или NULL, а затем ничего не осталось для нескольких столбцов в конце. Я думал, что он заполнил столбцы, сопоставив их заголовки между таблицей и CSV?


0

ChaosKing1236
28 Май 2021 в 20:40

Вы получите эту ошибку, если копируете в таблицу, в которой больше полей, чем в csv. В этом случае вам нужно указать поля CSV в порядке, указанном в заголовке файла.

Итак, если в строке заголовка вашего файла есть Field1,Field2,Field3, вы можете скопировать его в таблицу с полями Field1, Field2, Field3 и Field4, например это

psql -h mydbhost -c "copy "MyTable"("Field1","Field2","Field3") from 'yourfile.csv' csv header"

Я использовал в примере поля с учетом регистра в кавычках; вы можете упростить его, если это не относится к вашему варианту использования.

(спасибо @JGH за то, что подтолкнул меня в правильном направлении)


0

starfry
22 Июл 2022 в 18:00

    ОБНОВЛЕНИЕ — это официальные данные, которые правительство s offering, and it действительно уродливо. Нет UTF8, сломанные строки из того, что я вижу http://data.gov.ro/storage/f/2013-11-01T13:59:27.012Z/contracte-2007.csv

Код CREATE TABLE

CREATE TABLE contracte (
castigator text,
castigatorcui text,
castigatortara text,
castigatorlocalitate text,
castigatoradresa text,
tip text,
tipcontract text,
tipprocedura text,
autoritatecontractanta text,
autoritatecontractantacui text,
tipac text,
tipactivitateac text,
numaranuntatribuire text,
dataanuntatribuire text,
tipincheierecontract text,
tipcriteriiatribuire text,
culicitatieelectronica text,
numaroferteprimite text,
subcontractat text,
numarcontract text,
datacontract text,
titlucontract text,
valoare text,
moneda text,
valoareron text,
valoareeur text,
cpvcodeid text,
cpvcode text,
numaranuntparticipare text,
dataanuntparticipare text,
valoareestimataparticipare text,
monedavaloareestimataparticipare text,
fonduricomunitare text,
tipfinantare text,
tiplegislatieid text,
fondeuropean text,
contractperiodic text,
depozitegarantii text,
modalitatifinantare text
);

Код SQL

COPY contracte(Castigator,CastigatorCUI,CastigatorTara,CastigatorLocalitate,
CastigatorAdresa,Tip,TipContract,TipProcedura,AutoritateContractanta,
AutoritateContractantaCUI,TipAC,TipActivitateAC,NumarAnuntAtribuire,DataAnuntAtribuire,
TipIncheiereContract,TipCriteriiAtribuire,CuLicitatieElectronica,NumarOfertePrimite,
Subcontractat,NumarContract,DataContract,TitluContract,Valoare,Moneda,ValoareRON,
ValoareEUR,CPVCodeID,CPVCode,NumarAnuntParticipare,DataAnuntParticipare,
ValoareEstimataParticipare,MonedaValoareEstimataParticipare,FonduriComunitare,
TipFinantare,TipLegislatieID,FondEuropean,ContractPeriodic,DepoziteGarantii,
ModalitatiFinantare)
FROM 'C:SinaiaSEAP 2007-2015contracte-2009.csv'
WITH DELIMITER '^'encoding 'WIN1252' NULL AS '/N';

Ошибка, которую я получаю:

ERROR:  missing data for column "tip"
CONTEXT: COPY contracte, line 5312: "SC EUROSTRADE
SRL^7695851^Romania^Jilava^sediul social- Comuna Comana, Judetul Giurgiu"
********** Error **********

ERROR: missing data for column "tip"
SQL state: 22P04
Context: COPY contracte, line 5312: "SC EUROSTRADE SRL^7695851^Romania^Jilava^sediul social- Comuna Comana, Judetul Giurgiu"

Если я попытаюсь добавить CSV-заголовок, я получаю еще одну ошибку

ERROR:  extra data after last expected column
CONTEXT: COPY contracte, line 5209: "S.C. ELECTRA LUC S.R.L.^12094467^Romania^Bucuresti^Bucuresti, str. Vasile Lascar nr. 165, sector 2^A..."
********** Error **********

Создаю отношение

create table ПОТРЕБИТЕЛЬ (
    ИДЕНТИФИКАТОР serial not null primary key,
    НАЗВАНИЕ varchar(50) not null,
    "АДРЕС ЖИТЕЛЬСТВА" varchar(255) not null,
    "СКИДКА, %" smallint check ("СКИДКА, %" >= 0 and "СКИДКА, %" <= 100) not null
);

Затем пытаюсь заполнить таблицу, используя значения

insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (001, "АО ВАРЯ", "Сормовский", 10);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (002, "ГАЗ", "Автозаводский", 7);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (003, "МП ВЕРА", "Канавинский", 5);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (004, "МП", "Канавинский", 3);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (005, "АО СТАЛЬ", "Советский", 0);

Возникает ошибка в каждой строчке, якобы столбец не существует, при этом это даже не столбцы а аргументы
введите сюда описание изображения

    ОБНОВЛЕНИЕ — это официальные данные, которые правительство s offering, and it действительно уродливо. Нет UTF8, сломанные строки из того, что я вижу http://data.gov.ro/storage/f/2013-11-01T13:59:27.012Z/contracte-2007.csv

Код CREATE TABLE

CREATE TABLE contracte (
castigator text,
castigatorcui text,
castigatortara text,
castigatorlocalitate text,
castigatoradresa text,
tip text,
tipcontract text,
tipprocedura text,
autoritatecontractanta text,
autoritatecontractantacui text,
tipac text,
tipactivitateac text,
numaranuntatribuire text,
dataanuntatribuire text,
tipincheierecontract text,
tipcriteriiatribuire text,
culicitatieelectronica text,
numaroferteprimite text,
subcontractat text,
numarcontract text,
datacontract text,
titlucontract text,
valoare text,
moneda text,
valoareron text,
valoareeur text,
cpvcodeid text,
cpvcode text,
numaranuntparticipare text,
dataanuntparticipare text,
valoareestimataparticipare text,
monedavaloareestimataparticipare text,
fonduricomunitare text,
tipfinantare text,
tiplegislatieid text,
fondeuropean text,
contractperiodic text,
depozitegarantii text,
modalitatifinantare text
);

Код SQL

COPY contracte(Castigator,CastigatorCUI,CastigatorTara,CastigatorLocalitate,
CastigatorAdresa,Tip,TipContract,TipProcedura,AutoritateContractanta,
AutoritateContractantaCUI,TipAC,TipActivitateAC,NumarAnuntAtribuire,DataAnuntAtribuire,
TipIncheiereContract,TipCriteriiAtribuire,CuLicitatieElectronica,NumarOfertePrimite,
Subcontractat,NumarContract,DataContract,TitluContract,Valoare,Moneda,ValoareRON,
ValoareEUR,CPVCodeID,CPVCode,NumarAnuntParticipare,DataAnuntParticipare,
ValoareEstimataParticipare,MonedaValoareEstimataParticipare,FonduriComunitare,
TipFinantare,TipLegislatieID,FondEuropean,ContractPeriodic,DepoziteGarantii,
ModalitatiFinantare)
FROM 'C:\\Sinaia\SEAP 2007-2015\contracte-2009.csv'
WITH DELIMITER '^'encoding 'WIN1252' NULL AS '/N';

Ошибка, которую я получаю:

ERROR:  missing data for column "tip"
CONTEXT: COPY contracte, line 5312: "SC EUROSTRADE
SRL^7695851^Romania^Jilava^sediul social- Comuna Comana, Judetul Giurgiu"
********** Error **********

ERROR: missing data for column "tip"
SQL state: 22P04
Context: COPY contracte, line 5312: "SC EUROSTRADE SRL^7695851^Romania^Jilava^sediul social- Comuna Comana, Judetul Giurgiu"

Если я попытаюсь добавить CSV-заголовок, я получаю еще одну ошибку

ERROR:  extra data after last expected column
CONTEXT: COPY contracte, line 5209: "S.C. ELECTRA LUC S.R.L.^12094467^Romania^Bucuresti^Bucuresti, str. Vasile Lascar nr. 165, sector 2^A..."
********** Error **********

In PostgreSQL, multiple scenarios can cause a Column doesn’t exist error. For instance, the searched column doesn’t exist in the targeted table, the column’s naming convention doesn’t match, typo mistakes, etc. The stated error might occur in Postgres while executing the SELECT query, UPDATE query, INSERT query, ALTER statement, etc. To rectify the stated error, multiple approaches can be used in PostgreSQL.

This write-up will show you various causes and their respective solutions in Postgres. This post will cover the below-listed content to fix the “column does not exist exception/error” in Postgres.

Reason 1: Column Doesn’t Exist
— Solution: Add the Respective Column

Reason 2: Incorrect Column Spelling
— Solution: Correct the Column Name

Reason 3: Using Column Alias Incorrectly
— Solution: Use the Column Alias Correctly

So, let’s begin!

Reason 1: Column Doesn’t Exist

The most common reason that causes the stated error can be selecting a column that doesn’t exist in the targeted table. For instance, we have created a table named emp_info, whose data is shown in the below snippet:

SELECT * FROM emp_info;

img

The above snippet shows that the emp_info table has two columns: emp_id and emp_name. Now, trying to insert the data into a column that doesn’t exist in the table will throw the stated error:

INSERT INTO emp_info(emp_id, emp_name, emp_email)
VALUES (3, 'Joe', 'joe321@xyz.com');

img

The output shows that a “column doesn’t exist” error occurred when we accessed a column that didn’t exist in the table.

Solution: Add the Respective Column

To resolve the stated error, specify only those columns that exist in the targeted table or first add the desired column to the table; then, you can insert the data into that column. Execute the below command to add the “emp_email” column to the “emp_info” table:

ALTER TABLE emp_info
ADD COLUMN emp_email VARCHAR;

img

A new column has been added to the emp_info table. Now you can insert the data into that particular column as well:

INSERT INTO emp_info(emp_id, emp_name, emp_email)
VALUES (3, 'Joe', 'joe321@xyz.com');

img

The above snippet shows that the INSERT query was executed successfully, and the stated error has been resolved. You can verify the inserted data using the SELECT query:

SELECT * FROM emp_info;

img

This is how you can rectify the stated error in Postgres.

Reason 2: Incorrect Column Spelling

Another notable reason that can cause this error is accessing a column with incorrect spellings:

SELECT emp_nam
FROM emp_info;

img

The output snippet showed an error when a column was accessed with incorrect spellings. Postgres shows a hint that will help you rectify the stated error.

Solution: Correct the Column Name

To rectify the stated error, you must access the table’s column with the correct spellings as shown in the “HINT”:

SELECT emp_name 
FROM emp_info;

img

The output shows that correcting the column’s spelling resolves the stated error.

Reason 3: Using Column Alias Incorrectly

The “column doesn’t exist” error can occur if a column alias is used incorrectly. For instance, we have created two tables in Postgres named “article_details” and “article_info,” whose details are shown below:

SELECT * FROM article_details;

img

Now, we will fetch all the details about the “article_info” table:

SELECT * FROM article_info;

img

In the below snippet, we will use the column alias for the article_title column of the article_details table. Next, we will use the EXCEPT operator to find all those records that don’t exist in the article_info table. Finally, we will use the ORDER BY clause to sort the result set in descending order:

(SELECT article_title AS titles FROM article_details)
EXCEPT
(SELECT article_title FROM article_info)
ORDER BY article_title DESC;

img

In the above snippet, the stated error occurs because we use the column name instead of the column alias, which creates ambiguity.

Solution: Use the Column Alias Correctly

To fix the stated error, either remove the column alias from the SELECT statement or use the column alias in the ORDER BY clause. Let’s use the column alias in the ORDER BY clause and see whether the stated error has been resolved or not:

(SELECT article_title AS titles FROM article_details)
EXCEPT
(SELECT article_title FROM article_info)
ORDER BY titles DESC;

img

The output snippet proves that the “column doesn’t exist” error has been resolved successfully.

Conclusion

In PostgreSQL, the “column doesn’t exist” error can occur because of various reasons, such as the searched column doesn’t exist in the targeted table, typo mistakes, column alias being used incorrectly, etc. The stated error might occur in Postgres while executing the SELECT query, UPDATE query, INSERT query, ALTER statement, etc. Multiple approaches are explained in this Postgres guide to rectify the stated error.

Файлы к уроку:

  • Для спонсоров Boosty
  • Для спонсоров VK

Если ваши данные находятся в текстовых CSV-файлах, то их можно разом импортировать в базу данных. В PostgreSQL для этого есть команда COPY. Этой командой можно как импортировать данные, так и экспортировать.

3 шага для импорта данных из CSV:

  1. Подготовить CSV файл
  2. Создать таблицу в базе данных
  3. Выполнить импорт данных из CSV файла в заготовленную таблицу с использованием команды COPY

Работа с CSV-файлами

Многие приложения хранят данные в своих собственных уникальных форматах. Такие форматы сложно прочитать и конвертировать в нужный вам формат. К счастью, большинство программных продуктов позволяют экспортировать данные в формат CSV.

Каждая строка CSV-файла — это строка таблицы. В каждой строке значения столбцов разделены каким-то символом. Это может быть любой символ. В России в роли разделителя чаще всего используется двоеточие. На западе чаще всего применяется запятая.

Обычная строка CSV-файла выглядит примерно так:

1,Assumption Cathedral,Central Administrative District,Tver district,Kremlin,Lenin's Library,Sokolnica line,(495) 695-37-76,assumption-cathedral.kreml.ru,"37,617071","55,751012"

Разделители отделяют данные разных столбцов друг от друга. Используется одна запятая без пробела после нее.

Кавычки

Значения разных столбцов разделены запятыми. А что делать, если само значение содержит запятые? Например, в таблице есть столбцы широты и долготы, в которых целые части от дробных отделены запятыми. Если столбец содержит разделитель, то все его значения должны начинаться и заканчиваться специальным символом text qualifier. Чаще всего это двойные кавычки.

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

Строка заголовка

В CSV-файле обычно присутствует заголовок. Это строка, в которой перечислены имена столбцов. Выглядит она примерно так:

ID,Name,AdmArea,District,Address,MetroStation,MetroLine,PublicPhone,WebSite,Longitude_WGS84,Latitude_WGS84

Некоторые СУБД сверяют имя столбца из файла CSV с названием столбца в таблице базы данных. В PostgreSQL такого функционала нет. Чтобы избежать ошибок нужно пропустить строку заголовка, если такая имеется. Для этого используется ключевое слово HEADER.

Импорт данных с помощью COPY

Чтобы импортировать данные из CSV-файла сначала нужно проверить сам источник, потом создать таблицу в базе данных. Далее нужно выполнить простой код из трех строк.

copy имя_таблицы_в_которую_импортируются_данные
from 'путь_к_файлу_из_которого_копируются'
with (format CSV, header);

После ключевого слова WITH указываются параметры импорта. В данном случае указано, что формат файла источника — это CSV, в первой строке которого находятся заголовки. Параметров бывает много. Чаще всего используются следующие:

  • Формат файла. Параметром format имя_формата указывается какой формат файла читается или пишется. Названия форматов: CSV, TXT, BINARY. Чаще всего применятся формат CSV. В файле TXT обычно в роли разделителя выступает табуляция.
  • Строка заголовка. Параметр header означает, что в файле в первом столбце находятся заголовки. Этот параметр говорит базе данных, что импортировать данные нужно со второй строки.
  • Разделитель. Параметр delimiter ‘символ_разделитель’ указывает какой символ в файле выступает разделителем. Разделителем может быть только 1 символ. Например, если в файле значения столбцов разделяются точкой с запятой, то параметр выглядит так: delimiter ‘;’.
  • Символ кавычек. Двойные кавычки говорят о том, что данные между ними нужно считать одним значением. Вместо кавычек в CSV-файле может использоваться другой символ. В таком случае нужно воспользоваться параметром quote ‘символ_quote_qualifier’

Создаем таблицу

Создадим таблицу, в которую загрузим данные из CSV-файла с перечнем всех православных храмов Москвы.

create table religion (
  id smallint,
  church_name varchar(300),
  adm_area varchar(50),
  district varchar(50),
  address varchar(100),
  metro_station varchar(40),
  metro_line varchar(40),
  phone varchar(100),
  site varchar(200),
  longitude numeric(8, 6),
  latitude numeric(8, 6)
)
copy religion
from 'c:\Users\user\Desktop\sql_training\churches.csv'
with (format csv,
	  header,
	  delimiter ';',
	  encoding 'WIN1251')

Импорт некоторых столбцов

Если в вашем CSV-файле есть данные только для некоторых столбцов вы все равно можете выполнить импорт. Нужно будет указать какие столбцы есть в данных.

Добавим в нашу таблицы данные по мечетям. В CSV-файле с данными о мечетях нет столбцов MetroStation, MetroLine, Longitude, Latitude. Если попытаться импортировать данные из этого файла в таблицу religion, то вернется ошибка SQL Error [22P04]: ОШИБКА: нет данных для столбца «site».

Названия столбцов в CSV-файле не совпадают с названиями столбцов в базе данных. В таком случае импорт делает в несколько шагов:

  1. Создается временная таблица
  2. Во временную таблицу импортируются данные из CSV-файла
  3. Из временной таблицы в основную таблицу с помощью insert into копируются нужные столбцы
  4. Временна таблица удаляется
-- Создание временной таблицы
create temporary table mosques (
  id smallint,
  object_name varchar(300),
  adm_area varchar(50),
  district varchar(50),
  address varchar(100),
  phone varchar(100),
  email varchar(40),
  site varchar(200)
)

-- Импортируем данные во временную таблицу
copy mosques
from 'c:\Users\user\Desktop\sql_training\mosques.csv'
with (format csv,
	  header,
	  delimiter ';',
	  encoding 'WIN1251')

-- Копирование нужных столбцов из временной таблицы  
insert into religion (id,
					  object_name,
					  adm_area,
					  district,
					  address,
					  phone,
					  site)
select
  id,
  object_name,
  adm_area,
  district,
  address,
  phone,
  site
from mosques;

-- Удаляем временную таблицу
drop table mosques;

Экспорт с помощью COPY

Командой COPY можно не только импортировать данные, но и экспортировать. Разница в том, что теперь вместо ключевого слова FROM используется TO.

Есть 3 варианта экспорта:

  1. Таблица целиком
  2. Экспорт отдельных столбцов
  3. Экспорт результата запроса
-- Экспорт таблицы целиком
copy religion
to 'c:\Users\user\Desktop\sql_training\full_export.csv'
with (FORMAT csv,
	  header,
	  delimiter ';');

-- Экспорт выбранных столбцов
copy religion (object_name,
			   district,
			   address)
to 'c:\Users\user\Desktop\sql_training\certain_cols_export.csv'
with (FORMAT csv,
	  header,
	  delimiter ';');

-- Экспорт результата запроса
-- Выбираем столбцы
-- Оставляем только храмы из южного района
copy (select
	    object_name,
	    district,
	    address,
	    metro_station,
	    metro_line,
	    longitude,
	    latitude
	  from religion
	  where adm_area ilike '%southern%')
to 'c:\Users\user\Desktop\sql_training\query_export.csv'
with (FORMAT csv,
	  header,
	  delimiter ';');

Экспорт с помощью UI

Вся таблица целиком

Чтобы экспортировать всю таблицу целиком найдите ее в панели Базы данных — Правый клик — Экспорт данных.

Определенные строки и столбцы

Выполните запрос. Под превью нажмите на кнопку экспорта данных. Далее нужно выбрать удобный вам формат и указать количество строк для экспорта. Если вам нужно сохранить все вернувшиеся строки, то можете предварительно посчитать количество строк с помощью функции COUNT().

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Ошибка нет данных для импорта import xml
  • Ошибка невозможно использовать данный сертификат
  • Ошибка невозможно открыть файл rar
  • Ошибка невозможно записать на sd карту samsung
  • Ошибка невозможно открыть установочный пакет

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии