SurrealDB
SurrealDB ist v.a. eine Datenbank, kann aber auch als komplettes Backend für Webanwendungen fungieren.
Tools
- Die PgAdmin-Entsprechung für SurrealDB nennt sich surrealist.app
Libraries
Betrieb hinter Proxy-Server
- Wie betreibt man SurrealDB hinter einem NGinx-Proxy?
- Die offizielle Dokumentation enthält auch eine Anleitung zum Betreiben von SurrealDB in einem Container auf fly.io.
Skalierung
- für ein Cluster greift es wohl auf TiDB zurück
Benutzung der HTTP/REST-API
Die HTTP-API von SurrealDB ist dokumentiert.
Scope-User
Ein Scope wird mit DEFINE SCOPE angelegt.
Beim POST-Request des SIGNUP-Endpunkts wird ein JSON-Objekt mit folgenden Feldern übergeben:
- NS - der Namespace
- DB - die Datenbank
- SC - der Scope-Name (wie hinter DEFINE SCOPE geschrieben)
Die Namen der Felder können auch klein geschrieben werden oder ausgeschrieben:
- namespace
- database
- scope
In Version 1.2.1 dürfen die per POST übermittelten Daten NICHT mit einem Leerzeichen beginnen.
Beispiel eines SIGNUP:
curl \ -H "Accept: application/json" \ --data-binary $'{"ns":"myns", "db":"mydb", "sc": "another_scope"}\n' \ $surreal_url/signup
SELECT - Besonderheiten
ONLY Schlüsselwort
Das ONLY-Schlüsselwort funktioniert nur bei Angabe einer spezifischen Record-ID, nicht aber automatisch bei einer Menge, die nur ein Element enthält. Dann kommt der Fehler
Expected a single result output when using the ONLY keyword
Eine solche Menge ist aber akzeptabel, wenn sie
- durch
LIMIT 1
ausdrücklich auf eins begrenzt wird oder - indem man mit
[0]
das erste Element der Menge auswählt (dann braucht man aber das SELECT ... FROM ONLY auch nicht mehr).
Beispiel:
Folgendes funktioniert:
create food:orange; select * from only food:orange;
Das bringt oben genannten Fehler:
select * from only food where id=="food:orange";
Dagegen hilft LIMIT 1:
select * from only food where id=="food:orange" limit 1;
Oder einfach:
(select * from food)[0];
Alternativen:
RETURN (select * from food)[0];
oder
SELECT * FROM ONLY (select * from food)[0];