


Zeitweiliger Fehler wegen fehlender Tabelle in SQLite: Speicher: Datenbank
Der PHP-Editor Banana bietet Ihnen eine Lösung für den zeitweiligen Tabellenverlustfehler in SQLite. Wenn wir eine SQLite-Datenbank verwenden, kann es zu Speicherfehlern oder Tabellenverlusten kommen. Dieser Fehler wird normalerweise durch fehlerhafte Datenbankoperationen oder Speicherprobleme verursacht. Um dieses Problem zu lösen, können wir einige Maßnahmen ergreifen, z. B. die Optimierung von Abfrageanweisungen, die Erhöhung der Speichergrenzen usw. In diesem Artikel beschreiben wir detailliert, wie Sie dieses Problem beheben und beheben können, um einen ordnungsgemäßen Datenbankbetrieb sicherzustellen.
Frageninhalt
Wir verwenden SQLite 3.39.4 in Go über github.com/mattn/go-sqlite3 v1.14.16. Die Verbindungszeichenfolge ist ":memory:?cache=shared&mode=rwc&_mutex=no&_journal=WAL&_sync=NORMAL"
In unseren Tests sehen wir gelegentlich den Fehler „Keine solche Tabelle: Konfiguration“. Was verwirrend ist, ist, dass die betreffende Abfrage im Testfall erfolgreich verwendet wurde und die Tabelle anschließend in Abfragen an sqlite_master angezeigt wird, sowohl in der Datenbankverbindung als auch im Transaktionsobjekt, das den Fehler auslöst. Sobald jedoch ein Fehler auftritt, ist die Abfrage nicht mehr erfolgreich.
Mir ist klar, dass dies eine ziemlich vage Frage ist, aber kann jemand zumindest vorschlagen, wo man suchen muss? Datenbankverbindungen haben immer den gleichen Zeigerwert.
Update:
Bei meinem zweiten Versuch konnte ich das Problem in diesem SSCCE fastreproduzieren:
package main import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" "os" ) func main() { os.Remove("example.db") db, err := sql.Open("sqlite3", ":memory:") if err != nil { panic(err) } for _, s := range []string{ "CREATE TABLE if not exists Configuration (" + "`id` varchar(1024) NOT NULL," + "`body` varchar(10240) DEFAULT NULL, " + "PRIMARY KEY (id) " + ")", "INSERT INTO Configuration (id, body) VALUES ('some-unique-value', 'another-unique-value')", } { _, err = db.Exec(s) if err != nil { panic(err) } } for i := 0; i < 10; i++ { tx, err := db.Begin() if err != nil { panic(err) } q, err := tx.Prepare("select Configuration.id, Configuration.body \n\t\t\tfrom Configuration\n\t\t\tWHERE Configuration.id = ? ") fmt.Println(i, err) if q != nil { _ = q.Close() } fmt.Println("tx:") showTables(tx) fmt.Println("db:") showTables(db) tx.Commit() } } func showTables(db interface { Query(query string, args ...interface{}) (*sql.Rows, error) }) { r, err := db.Query("SELECT name FROM sqlite_master") if err != nil { panic(err) } for r.Next() { var name string _ = r.Scan(&name) fmt.Println(name) } }
Es unterscheidet sich von der eigentlichen Frage, da showTables die Tabellen nicht in SSCCE anzeigt, sondern im eigentlichen Test. Dieses Beispiel zeigt das Problem der Verwendung von :memory:
anstelle von example.db
, jedoch nur, wenn die Transaktion nicht geschlossen ist. Ist dies ein bekanntes oder erwartetes Verhalten von In-Memory-Datenbanken? :memory:
而不是 example.db
的问题,但前提是事务未关闭。这是内存数据库已知的或预期的行为吗?
解决方法
Go database/sql
隐式使用连接池,但 :memory:
WorkaroundGo database/sql
verwendet implizit Verbindungspooling, aber :memory:
Datenbanken öffnen ihre Verbindungen standardmäßig privat
https://www.php.cn/link/d346256ad566cf97801e5cecc45a2557
cache=shared
,正如您所尝试的那样。但 SQLite 要求将其指定为 URI:file::memory:?cache=shared
(file:
Da hinter den Kulissen mehrere SQLite-Verbindungen erstellt/geschlossen werden, wissen Sie nicht wirklich, welche Verbindung welche Anweisung und für welche Datenbank ausführt, sodass einige Verbindungen natürlich bestimmte Daten sehen können und andere nicht ankommen können.
Eine Möglichkeit, eine Verbindung zu teilen, ist die Verwendung von
ist wichtig).- Eine zuverlässigere Möglichkeit, eine Shared-Memory-Datenbank zu öffnen, ist:
file:memdb1?mode=memory&cache=shared
(命名为memdb1
-
file:/memdb1?vfs=memdb
(命名为/memdb1
,并使用memdb
)
VFS)
🎜 🎜 Ihre anderen Parameter können unnötig oder sogar schädlich sein (für In-Memory-Datenbanken). 🎜Das obige ist der detaillierte Inhalt vonZeitweiliger Fehler wegen fehlender Tabelle in SQLite: Speicher: Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

In diesem Artikel werden eine Vielzahl von Methoden und Tools eingeführt, um PostgreSQL -Datenbanken im Debian -System zu überwachen, um die Datenbankleistung vollständig zu erfassen. 1. verwenden Sie PostgreSQL, um die Überwachungsansicht zu erstellen. PostgreSQL selbst bietet mehrere Ansichten für die Überwachung von Datenbankaktivitäten: PG_STAT_ACTIVITY: Zeigt Datenbankaktivitäten in Echtzeit an, einschließlich Verbindungen, Abfragen, Transaktionen und anderen Informationen. PG_STAT_REPLIKATION: Monitore Replikationsstatus, insbesondere für Stream -Replikationscluster. PG_STAT_DATABASE: Bietet Datenbankstatistiken wie Datenbankgröße, Transaktionsausschüsse/Rollback -Zeiten und andere Schlüsselindikatoren. 2. Verwenden Sie das Log -Analyse -Tool PGBADG

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Wie kann man im Beegoorm -Framework die mit dem Modell zugeordnete Datenbank angeben? In vielen BeEGO -Projekten müssen mehrere Datenbanken gleichzeitig betrieben werden. Bei Verwendung von BeEGO ...
