PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để tôi có thể nhập dữ liệu từ ASCII (ISO / IEC 8859-1) vào cơ sở dữ liệu Rails / PGSQL của mình?

Zip chứa một số tệp:

  inflating: DATA_SRC.txt            
  inflating: DATSRCLN.txt            
  inflating: DERIV_CD.txt            
  inflating: FD_GROUP.txt            
  inflating: FOOD_DES.txt            
  inflating: FOOTNOTE.txt            
  inflating: LANGDESC.txt            
  inflating: LANGUAL.txt             
  inflating: NUT_DATA.txt            
  inflating: NUTR_DEF.txt            
  inflating: sr26_doc.pdf            
  inflating: SRC_CD.txt              
  inflating: WEIGHT.txt         

mỗi trong số đó dường như có định dạng kỳ lạ gần giống CSV, ví dụ:NUTR_DEF.txt :

~287~^~g~^~GALS~^~Galactose~^~2~^~2100~
~291~^~g~^~FIBTG~^~Fiber, total dietary~^~1~^~1200~

cộng với sr26_doc.pdf , tài liệu.

Tạo định nghĩa bảng

Vì vậy, những gì bạn cần làm ở đây là tạo các định nghĩa bảng SQL cho cơ sở dữ liệu - với một bảng cho mỗi tệp đầu vào. Bạn cần CREATE TABLE lệnh cho điều này; xem tài liệu PostgreSQL.

Trang 35 của PDF sẽ giúp bạn - "Hình 1. Mối quan hệ giữa các tệp trong Cơ sở dữ liệu dinh dưỡng quốc gia USDA để tham khảo tiêu chuẩn". Các trang sau mô tả các định dạng tệp, cho bạn biết ý nghĩa của mỗi cột. Bạn có thể viết CREATE TABLE báo cáo dựa trên mô tả này.

Đây là một ví dụ, cho FOOD_DES.txt (mô tả món ăn), mục nhập đầu tiên.

CREATE TABLE food_des (
    "NDB_No"      varchar(5) NOT NULL PRIMARY KEY,
    "FdGrp_Cd"    varchar(4) NOT NULL,
    "Long_Desc"   varchar(200) NOT NULL,
    "Shrt_Desc"   varchar(60) NOT NULL,
    "ComName"     varchar(100),
    "ManufacName" varchar(65),
    "Survey"      varchar(1),
    "Ref_desc"    varchar(135),
    "Refuse"      smallint,
    "SciName"     varchar(65),
    "N_Factor"    NUMERIC(4,2),
    "Pro_Factor"  NUMERIC(4,2),
    "Fat_Factor"  NUMERIC(4,2),
    "CHO_Factor"  NUMERIC(4,2)
);

Đó là một bản sao mô tả khá theo nghĩa đen. Đó không phải là cách tôi thiết kế bảng

Tôi đã sử dụng NUMERIC các kiểu dấu phẩy động thập phân có độ chính xác tùy ý cho độ chính xác ở các kiểu số không phải số nguyên. Nếu hiệu suất quan trọng hơn độ chính xác, bạn có thể sử dụng float4 thay vào đó.

Đối với các mối quan hệ, bạn sử dụng FOREIGN KEY ràng buộc - chỉ colname coltype REFERENCES othertable(othercol) là đủ để tạo một.

Quan trọng :Tôi đã trích dẫn kép tên cột để giữ nguyên tên giống như trong định nghĩa. Điều đó có nghĩa là bạn phải luôn trích dẫn kép chúng khi bạn đề cập đến chúng, ví dụ:SELECT "NDB_No" FROM food_des; . Nếu bạn không muốn điều đó, chỉ cần bỏ dấu ngoặc kép - hoặc chọn các tên khác. Bạn không cần phải tuân theo những tên cột viết tắt vụng về mà họ đã sử dụng, và khá hợp lý khi viết:

CREATE TABLE food_description (
    ndb_no              varchar(5) NOT NULL PRIMARY KEY,
    foodgroup_code      varchar(4) NOT NULL,
    long_description    varchar(200) NOT NULL,
    short_description   varchar(60) NOT NULL,
    common_name         varchar(100),
    manufacturer_name   varchar(65),

v.v. Tương tự, nếu bạn đang làm việc với Rails, bạn có thể chuyển đổi các định nghĩa bảng để tuân theo các quy ước của Rails, đặc biệt nếu sau đó bạn có ý định tải dữ liệu qua Rails.

Đang tải dữ liệu

Nếu đây là các tệp được phân tách hợp lý, lành mạnh, bạn có thể tải từng bảng bằng cách sử dụng psql lệnh \copy hoặc tùy chọn "nhập" của PgAdmin-III.

Nó thực sự là CSV, họ vừa quyết định sử dụng dấu phân cách và ký tự trích dẫn hoàn toàn kỳ lạ. Nhập qua psql với:

\copy food_des FROM 'FOOD_DES.txt' (FORMAT CSV, DELIMITER '^', QUOTE '~');

hoặc tương đương trong bất kỳ công cụ nào bạn sử dụng để nói chuyện với PostgreSQL.

Kết quả là một bảng dễ nhìn:

craig=> select * from food_des limit 2;
 NDB_No | FdGrp_Cd |         Long_Desc          |        Shrt_Desc         | ComName | ManufacName | Survey | Ref_desc | Refuse | SciName | N_Factor | Pro_Factor | Fat_Factor | CHO_Factor 
--------+----------+----------------------------+--------------------------+---------+-------------+--------+----------+--------+---------+----------+------------+------------+------------
 01001  | 0100     | Butter, salted             | BUTTER,WITH SALT         |         |             | Y      |          |      0 |         |     6.38 |       4.27 |       8.79 |       3.87
 01002  | 0100     | Butter, whipped, with salt | BUTTER,WHIPPED,WITH SALT |         |             | Y      |          |      0 |         |     6.38 |       4.27 |       8.79 |       3.87
(2 rows)

Tương tự, nếu sử dụng Rails, bạn có thể sử dụng bất kỳ thư viện Rails CSV nào bạn muốn và tải hàng loạt vào các mô hình.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi PostgreSQL:Fatal:tên người dùng vai trò không tồn tại

  2. Có thể cung cấp các tham số cho tên bảng hoặc cột trong Câu lệnh chuẩn bị hoặc QueryRunner.update () không?

  3. thứ tự cột trong câu lệnh SELECT * - được đảm bảo?

  4. Chuyển dự án Django từ backend sqlite3 sang postgresql bị lỗi khi tải datadump

  5. Kết nối Postgres đã bị đóng trong Spring Boot