2016-11-17 44 views
0

我正在從sqlite遷移到postgres。如何將APSchduelder sqlite恢復到Postgres

這裏是dumpfile.sql

PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE apscheduler_jobs (
    id VARCHAR(191) NOT NULL, 
    next_run_time FLOAT, 
    job_state BLOB NOT NULL, 
    PRIMARY KEY (id) 
); 

我試圖像APScheduler通過從該回購https://github.com/jarekwg/django-apscheduler/blob/master/django_apscheduler/migrations/0001_initial.py

然後,SQL命令是跟隨遷移SQLite的確實創造了相同的模式:

CREATE TABLE "apscheduler_jobs" ("id" varchar(255) NOT NULL PRIMARY KEY, "next_run_time" NUMERIC(11,2) NOT NULL, "job_state" bytea NOT NULL); 
CREATE INDEX "apscheduler_jobs_83d3412e" ON "apscheduler_jobs" ("next_run_time"); 
CREATE INDEX "apscheduler_jobs_id_9f0be75e_like" ON "apscheduler_jobs" ("id" varchar_pattern_ops); 

我準備了以下數據庫:

CREATE DATABASE apscheduler; 
GRANT ALL PRIVILEGES ON database apscheduler to uih; 

我的問題: 請參閱此網址。我試圖鑄造輸入是一個bytea https://www.postgresql.org/docs/9.4/static/functions-string.html

INSERT INTO "apscheduler_jobs" 
VALUES('c891c2288a0f4585b169a335dd57b971', 
     1.51008480006619596482e+09, 
     decode(X'800495EA010000000000007D94288C126D6973666972655F67726163655F74696D65944B018C086578656375746F72948C0764656661756C74948C0D6D61785F696E7374616E636573944B018C0466756E63948C1E7363686564756C65722E747269676765723A747269676765725F66756E63948C08636F616C6573636594888C066B7761726773947D948C0774726967676572948C1961707363686564756C65722E74726967676572732E64617465948C0B44617465547269676765729493942981947D94288C0872756E5F64617465948C086461746574696D65948C086461746574696D65949394430A07E10B08030000010294948C0E646174657574696C2E747A2E747A948C08747A6F66667365749493942981947D94288C075F6F6666736574948C086461746574696D65948C0974696D6564656C74619493944B004D70624B00879452948C055F6E616D65944E7562869452948C0776657273696F6E944B01756268234B018C046E616D65948C206338393163323238386130663435383562313639613333356464353762393731948C0269649468258C0D6E6578745F72756E5F74696D659468228C04617267739468258C382F6170692F7363686564756C65732F747269676765722F63383931633232383861306634353835623136396133333564643537623937312F948694752E', 'base64') 
) 
[2016-11-17 17:16:47] [42883] ERROR: function decode(bit, unknown) does not exist 
    Hint: No function matches the given name and argument types. You might need to add explicit type casts. 
    Position: 117 

什麼是正確的語法restoresqlite轉儲文件postgres

更新: enter image description here 我有它新的問題。第二行來自手冊INSERT。我有點擔心它。我會嘗試再次回到這裏。

更新: 十進制是沒有問題的

+0

你嘗試使用'base64' .. –

+0

@vaoTsun我來解碼二進制字符串?我試圖導入我的記錄。我不知道什麼是正確的參數 – Sarit

+0

我編輯答案有你的插入行。你試圖做什麼? –

回答

1

我不知道如果我得到你的權利。我截斷了你的長字符串,並從二進制變爲bytea並插入了值。是不是你嘗試做?:

t=# create table b5 (bta bytea); 
CREATE TABLE 
t=# insert into b5 select X'800495EA0100'; 
ERROR: column "bta" is of type bytea but expression is of type bit 
LINE 1: insert into b5 select X'800495EA0100'; 
          ^
HINT: You will need to rewrite or cast the expression. 
t=# insert into b5 select E'\\x800495EA0100'; 
INSERT 0 1 
t=# select * from b5; 
     bta 
---------------- 
\x800495ea0100 
(1 row) 

爲您插入到工作,它應該是什麼樣子:

INSERT INTO "apscheduler_jobs" 
VALUES('c891c2288a0f4585b169a335dd57b971', 
     1.51008480006619596482e+09, 
     E'\\x800495EA010000000000007D94288C126D6973666972655F67726163655F74696D65944B018C086578656375746F72948C0764656661756C74948C0D6D61785F696E7374616E636573944B018C0466756E63948C1E7363686564756C65722E747269676765723A747269676765725F66756E63948C08636F616C6573636594888C066B7761726773947D948C0774726967676572948C1961707363686564756C65722E74726967676572732E64617465948C0B44617465547269676765729493942981947D94288C0872756E5F64617465948C086461746574696D65948C086461746574696D65949394430A07E10B08030000010294948C0E646174657574696C2E747A2E747A948C08747A6F66667365749493942981947D94288C075F6F6666736574948C086461746574696D65948C0974696D6564656C74619493944B004D70624B00879452948C055F6E616D65944E7562869452948C0776657273696F6E944B01756268234B018C046E616D65948C206338393163323238386130663435383562313639613333356464353762393731948C0269649468258C0D6E6578745F72756E5F74696D659468228C04617267739468258C382F6170692F7363686564756C65732F747269676765722F63383931633232383861306634353835623136396133333564643537623937312F948694752E' 
) 
+0

謝謝瓦。。它確實插入了一條記錄。 – Sarit

+0

LINE 1:... S('60de20e1c67d4b3097daa389ae5fe786',1501558200.0,E'\\ 800495 ... @VaoTsun我已經改變了我的批量INSERT和你一樣,但是我得到了錯誤,現場有什麼魔法? – Sarit

+1

'E' \\ 800 495 ...'不是bytea,'E'\\ x800 495 ...'是 –