2016-07-03 6 views
1

Zeoslib을 사용하여 SQLite로 메모리 내장 데이터베이스를 만들고 있는데, 프로그램을 닫거나 파일을 정기적으로 덤프 할 때 데이터베이스에 디스크를 저장해야합니다.SQL 삽입 명령으로 선택 쿼리를 출력 할 수있는 SQLite 명령이 있습니까?

SQLite3 프로그램이 메모리 데이터베이스에서 처리 할 수 ​​없으므로 쿼리의 결과를 INSERT 문으로 내보내는 SQLite를 구할 수 있습니까?

추신. sqlite3은이 스레드에 표시된 것처럼 메모리 데이터베이스를 디스크에 덤프 할 수 있지만 메모리 내 데이터베이스는 다른 응용 프로그램에서 생성되므로이 예제를 어떻게 작동시키는 지 알 수 없습니다.

+0

파일을 원한다면 왜 처음에 메모리 내장 DB를 사용하고 있습니까? –

+0

메모리 내 처리 속도가 필요하지만 완료되면 디스크에 다시 저장하려고합니다. – vfclists

답변

2

메모리 DB를 디스크에 저장하려면 SQLite의 backup API으로 복사본을 만드십시오. 이를 위해서는 데이터베이스 드라이버가 실제로 백업 API를 지원해야합니다. Zeos는 분명히 그렇지 않습니다. 속도가 느린 디스크에 데이터베이스를 만드는 것


디스크 (대부분의 캐시 될 수있다) 그 자체에 접근하지만, 동기화는 DB가 그대로 유지되도록 할 수없는 경우에도 프로그램이나 컴퓨터 충돌.

인 메모리 DB로 안전하지 않은 것으로 온 - 디스크 DB를 만드는 비용, 속도를 향상 설정을 제공하고 있습니다 :

  • 설정 PRAGMA synchronousOFF에 :

    동기 끄기 (0)를 사용하면 SQLite는 데이터를 운영 체제에 전달하는 즉시 동기화하지 않고 계속 진행합니다. SQLite를 실행하는 응용 프로그램이 충돌하면 데이터가 안전하지만 데이터가 디스크 표면에 기록되기 전에 운영 체제가 충돌하거나 컴퓨터의 전원이 꺼지면 데이터베이스가 손상 될 수 있습니다. 반면, 동기 OFF를 사용하면 커밋 수가 훨씬 빠르게 될 수 있습니다. MEMORY에

  • 설정 PRAGMA journal_mode :

    모드를 저널링 메모리는 휘발성 RAM에 롤백 저널을 저장합니다. 이렇게하면 디스크 I/O가 절약되지만 데이터베이스 안전성과 무결성이 희생됩니다. MEMORY 저널링 모드가 설정되어있을 때 SQLite를 사용하는 응용 프로그램이 트랜잭션 중간에 충돌하면 데이터베이스 파일이 손상 될 가능성이 큽니다.

  • 증가량은 PRAGMA cache_size (기본값은 일반적으로 2MB)입니다.

  • 비활성화 PRAGMA secure_delete.