2016-11-22 7 views
0

이 오류의 의미를 이해하는 데 어려움이 있습니다. 내가 사용하는 명령했다 :cmd에서 pgsl 백업을 복원하기위한 psql 오류

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 

되지 않음 진행중인 트랜잭션을 만드는 방법을 정말해야합니다. 이것은 postgresl로 가져 오기를 시도한 sql 파일입니다. http://pastebin.com/2xMGhstd

+0

는'user.id = 1' raffle''에 삽입 원인이 존재하지 않습니다 (다음과 모든이) 실패. – joop

+0

결론은 무엇입니까? – riech

+0

죄송합니다. user_id = 1은 어디에 있습니까? – riech

답변

0

joop이 설명 했으므로 SQL 파일이 일관성이 없습니다.

raffle.user_id 모든 id 값이 동일한 값을 갖는다 "user"의 행이 있어야한다는 것을 의미 raffle.user_id에서 "user".id에 외래 키 제약이있다.

지금 1과 동일한 id"user"에 삽입 된 행이 없지만, 스크립트는 외래 키 제약 조건을 위반하는 오류가 발생 1.

에 동일한 user_id으로 raffle에 행을 삽입하려고 시도합니다. PostgreSQL 트랜잭션에 오류가 발생하면 ROLLBACK 만 가능합니다. 그렇게 할 때까지 트랜잭션의 모든 명령문은 사용자가 관찰 한 오류와 함께 실패합니다.

유일한 해결책은 일관성있게 데이터를 수정하거나 외래 키 제약 조건을 제거하여 일관성을 포기하는 것입니다.

참고 :USER과 같은 예약 된 SQL 키워드를 선택하는 것은 좋지 않습니다.

+0

무엇이 foregin 키 구속 제가 제거해야합니까 – riech

+0

', 외래 키 (user_id) 참조 user (id)' –

+0

그 여전히 같은 오류가 있었습니까 – riech

0

as @joop commented : user_id = 1이 users 테이블에 없지만 raffle 테이블에서 참조되었으므로 .dmp 파일이 손상됩니다. : 다음 스 니펫을 실행 한 다음 사용자 # 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