The first stable release of the relational-graph database EdgeDB

The first stable release of EdgeDB is available, which builds on PostgreSQL with an implementation of a relational-graph data model and EdgeQL query language, optimized for handling complex hierarchical data. The code is written in Python and Rust and is distributed under the Apache 2.0 license. Client libraries are available for Python, Go, Rust, and TypeScript/Javascript. A command-line toolkit is provided for managing the database and for interactive query execution (REPL).

Instead of a table-based data model, EdgeDB uses a declarative system based on object types. Instead of foreign keys to define relationships between types, linking through references is used (one object can be used as a property of another object). type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }

Indexes can be used to speed up query processing. Features such as strict property typing, property value constraints, computed properties, and stored procedures are also supported. Among the features of EdgeDB's object storage schema, which somewhat resembles ORM, are the ability to mix schemas, link properties from different objects, and integrated JSON support.

Built-in tools are provided for schema migration — after changing the schema defined in a separate esdl file, simply execute the command 'edgedb migration create' and the database will analyze the differences in the schema and interactively generate a script for migrating to the new schema. The history of schema changes is automatically tracked.

To form queries, both the GraphQL query language and the proprietary EdgeDB language are supported, which is an adaptation of SQL for hierarchical data. Instead of lists, query results are presented in a structured format, and instead of subqueries and JOIN operations, there is the possibility of specifying one EdgeQL query as an expression within another query. Transactions and loops are supported. select Movie { title, actors: { name } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", actors := ( select Person filter .name in { ā€˜Keanu Reeves’, ā€˜Carrie-Anne Moss’, ā€˜Laurence Fishburne’ } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );

Source: opennet.ru

Buy reliable website hosting with DDoS protection, VPS VDS servers šŸ”„ Buy reliable website hosting with DDoS protection, VPS VDS servers | ProHoster