2016-11-22 10 views
0

Мне сложно понять, что означает эта ошибка. Команда, которую я использовал, был:Ошибка psql для восстановления резервной копии pgsl на cmd

psql -U postgres -d app -1 -f postgres.sql 

и это ошибка:

psql:postgres.sql:1879: ERROR: current transaction is aborted, commands ignored 
    until end of transaction block 

ROLLBACK 
psql:postgres.sql:0: WARNING: there is no transaction in progress 

Не совсем уверен, как сделать незавершенные транзакции. Это файл sql, который я пытался импортировать в postgresl: http://pastebin.com/2xMGhstd

+0

'user.id = 1 'не существует, в результате чего вкладыши в' raffle' (и все, что следует), чтобы потерпеть неудачу. – joop

+0

Так что же тут вывод? – riech

+0

Извините, где user_id = 1 go? – riech

ответ

0

Как объяснил joop, ваш файл SQL является непоследовательным.

Существует ограничение внешнего ключа от raffle.user_id к "user".id, что означает, что для каждого значения в raffle.user_id должна быть строка в "user", где id имеет то же значение.

Теперь нет строки вставляется в "user" с id равными 1, но скрипт пытается вставить строку в raffle с user_id равным 1.

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

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

Примечание: Плохая идея выбрать зарезервированное ключевое слово SQL, например USER.

+0

Что такое ключ переднего ключа, который я должен удалить – riech

+0

', FOREIGN KEY (user_id) ССЫЛКИ user (id)' –

+0

сделал это по-прежнему той же ошибкой – riech

0

Как @joop прокомментировал: ваш .dmp-файл поврежден, потому что user_id = 1 не существует в таблице users, но передается в таблице raffle. Пример: выполните следующий фрагмент, затем раскомментируйте строку с № пользователя 1 и запустите ее снова.


-- Drop the schema *after* usage 
-- DROP SCHEMA tmp CASCADE; 
CREATE SCHEMA tmp ; 
SET search_path=tmp; 

CREATE TABLE users (
     id INTEGER NOT NULL, 
     email VARCHAR(120), 
     PRIMARY KEY (id), 
     UNIQUE (email) 
); 
    -- UNCOMMENT the next line to also add user#1 
-- INSERT INTO users VALUES(1,'[email protected]'); 
INSERT INTO users VALUES(2,'[email protected]'); 
INSERT INTO users VALUES(3,'[email protected]'); 
INSERT INTO users VALUES(4,'[email protected]'); 
INSERT INTO users VALUES(5,'[email protected]'); 
INSERT INTO users VALUES(6,'[email protected]'); 
INSERT INTO users VALUES(7,'[email protected]'); 
INSERT INTO users VALUES(8,'[email protected]'); 
INSERT INTO users VALUES(9,'[email protected]'); 
INSERT INTO users VALUES(10,'[email protected]'); 
CREATE TABLE raffle (
     id INTEGER NOT NULL, 
     user_id INTEGER, 
     colour VARCHAR(120), 
     up1 VARCHAR(4), 
     up2 VARCHAR(4), 
     PRIMARY KEY (id), 
     CONSTRAINT _color_up1_up2_uc UNIQUE (colour, up1, up2), 
     FOREIGN KEY(user_id) REFERENCES users (id) 
); 
INSERT INTO raffle VALUES(1,1,'Blue','7c4c','5c7e'); 
INSERT INTO raffle VALUES(2,1,'Pink','635d','853f'); 
INSERT INTO raffle VALUES(3,1,'Plum','5e80','7611'); 
INSERT INTO raffle VALUES(4,1,'Aqua','937c','1b75'); 
INSERT INTO raffle VALUES(5,2,'Navy','1d9a','8914'); 
INSERT INTO raffle VALUES(6,1,'Grey','d869','fc97'); 
INSERT INTO raffle VALUES(7,4,'Rose','5fee','b31f'); 
INSERT INTO raffle VALUES(8,1,'Ruby','d5b4','e749'); 
INSERT INTO raffle VALUES(9,2,'Teal','cf0b','3bf5'); 
INSERT INTO raffle VALUES(10,1,'Gold','98a7','3079'); 
INSERT INTO raffle VALUES(11,1,'Jade','5c69','66f8'); 
INSERT INTO raffle VALUES(12,1,'Lime','156f','6b34'); 
INSERT INTO raffle VALUES(13,1,'Blue','7da3','d95b'); 
INSERT INTO raffle VALUES(14,1,'Pink','a63e','b9b6'); 
INSERT INTO raffle VALUES(15,1,'Plum','d989','71a5'); 
INSERT INTO raffle VALUES(16,1,'Aqua','7372','0682'); 
/**** 
INSERT INTO raffle VALUES(17,9,'Navy','01b3','e444'); 
INSERT INTO raffle VALUES(18,1,'Grey','d679','0123'); 
INSERT INTO raffle VALUES(19,1,'Rose','5963','692d'); 
... 
***/ 
COMMIT; 
+0

по-прежнему та же ошибка – riech

+0

Вы также ** раскомментировали ** строку с 'VALUES (1, 'Jim.Fake @ nolive.co.uk');'? – wildplasser

+0

Да еще не работает – riech