Как импортировать таблицы в формате (9.0)? - PullRequest
1 голос
/ 29 августа 2011

Это первые три строки моего текстового файла:

  Dist    Mv  CL Typ  LTef  logg Age Mass  B-V    U-B    V-I    V-K    V   [Fe/H] l           b         Av   Mbol
  0.033 14.40  5 7.90 3.481  5.10  1 0.15  1.723  1.512  3.153  5.850 17.008  0.13   0.50000   0.50000  0.014 12.616
  0.033  7.40  5 6.50 3.637  4.62  7 0.71  1.178  0.984  1.302  2.835 10.047 -0.56   0.50000   0.50000  0.014  6.125
  0.052 11.70  5 7.40 3.529  4.94  2 0.31  1.541  1.167  2.394  4.565 15.393 -0.10   0.50000   0.50000  0.028 10.075

Если у меня есть нужные столбцы, как мне импортировать это?

Бонус: возможно ли это / естьинструменты для автоматического создания схемы из файлов такого типа?

1 Ответ

5 голосов
/ 29 августа 2011

На самом низком уровне вы можете просто использовать команду COPY (или \copy в psql, если у вас нет доступа к учетной записи суперпользователя, которая COPY требует загрузки данных из файла). К сожалению, вам сначала нужно создать структуру таблицы (нет встроенной функции предположения по заголовку ), но написать ее просто.

Выберите подходящий тип тип данных , например, вам нужно. real для плавающей запятой одинарной точности (IEEE 754), double precision или numeric, если вам нужны числа произвольной точности:

CREATE TABLE measurement
(
    "Dist" double precision,
    "Mv" double precision,
    "CL" double precision,
    "Typ" double precision,
    "LTef" double precision,
    "logg" double precision,
    "Age" double precision,
    "Mass" double precision,
    "B-V" double precision,
    "U-B" double precision,
    "V-I" double precision,
    "V-K" double precision,
    "V" double precision,
    "[Fe/H]" double precision,
    "l" double precision,
    "b" double precision,
    "Av" double precision,
    "Mbol" double precision
);

Другое дело, что ваш файл содержит несколько пробелов между значениями, поэтому лучше преобразовать его в записи с разделителями-табуляциями (для этого есть множество инструментов):

$ sed 's/  */\t/g' import.csv
Dist    Mv  CL  Typ LTef    logg    Age Mass    B-V U-B V-I V-K V   [Fe/H]  l   b   Av  Mbol
0.033   14.40   5   7.90    3.481   5.10    1   0.15    1.723   1.512   3.153   5.850   17.008  0.13    0.50000 0.50000 0.014   12.616
0.033   7.40    5   6.50    3.637   4.62    7   0.71    1.178   0.984   1.302   2.835   10.047  -0.56   0.50000 0.50000 0.014   6.125
0.052   11.70   5   7.40    3.529   4.94    2   0.31    1.541   1.167   2.394   4.565   15.393  -0.10   0.50000 0.50000 0.028   10.075

Наконец, вы можете импортировать ваш файл прямо в базу данных Postgres, например:

=> \copy measurement FROM '/path/import.csv' (FORMAT csv, DELIMITER E'\t', HEADER 'true')
=> TABLE measurement;
 Dist  |  Mv  | CL | Typ | LTef  | logg | Age | Mass |  B-V  |  U-B  |  V-I  |  V-K  |   V    | [Fe/H] |  l  |  b  |  Av   |  Mbol  
-------+------+----+-----+-------+------+-----+------+-------+-------+-------+-------+--------+--------+-----+-----+-------+--------
 0.033 | 14.4 |  5 | 7.9 | 3.481 |  5.1 |   1 | 0.15 | 1.723 | 1.512 | 3.153 |  5.85 | 17.008 |   0.13 | 0.5 | 0.5 | 0.014 | 12.616
 0.033 |  7.4 |  5 | 6.5 | 3.637 | 4.62 |   7 | 0.71 | 1.178 | 0.984 | 1.302 | 2.835 | 10.047 |  -0.56 | 0.5 | 0.5 | 0.014 |  6.125
 0.052 | 11.7 |  5 | 7.4 | 3.529 | 4.94 |   2 | 0.31 | 1.541 | 1.167 | 2.394 | 4.565 | 15.393 |   -0.1 | 0.5 | 0.5 | 0.028 | 10.075
(3 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...