3 ms·
> PL/Rust is a loadable procedural language that enables writing PostgreSQL functions in the Rust programming language Use to write PostgreSQL functions in Rus
by mkl95 4y ago
> PL/Rust is a loadable procedural language that enables writing PostgreSQL functions in the Rust programming language
Use to write PostgreSQL functions in Rust. Also
> The top advantages of PL/Rust include writing natively-compiled functions to achieve the absolute best performance, access to Rust's large development ecosystem, and Rust's compile-time safety guarantees.
- systems 4y agoAs someone who have done a lot of database development, none of these sound advantageous Using a text oriented language like Perl with a good regexp engine might DB performance, comes from indexes , table partitioning and in-memory tables and to compile query execution plans, so you save some time the very first you run a procedure
- ixfo 4y agoDoing in-database computation can be very advantageous for some applications, and writing those functions in Rust would be fantastic for some uses, not least for the library ecosystem. I did some work on video similarity search with in-DB search which would've certainly benefited.
- ttfkam 4y agoDB performance also comes from size efficiency of user-defined data types, user-defined operator functions (typically for use with those user-defined data types), etc. Smaller, more efficient types directly translate to less disk usage and smaller indexes, both of which measurably improve database performance.
- pjmlp 4y agoI assume PL/pg is not behind the curve in relation to PL/SQL and T-SQL for UDTs.
- doctor_eval 4y ago> DB performance, comes from indexes , table partitioning and in-memory tables and to compile query execution plans, so you save some time the very first you run a procedure The network round trip to the database can also be a pretty significant performant penalty, especially when iterating over large sets.
- samanator 4y agoA crucial facet of optimization for computational triggers in PostgreSQL pertains to the implementation of event triggers, which enable operations to be executed in bulk (per DML statement) rather than on a per-row basis. It appears that, at present, PL/Rust has not incorporated support for event triggers. According to the documentation: > Event Triggers and DO blocks are not (yet) supported by PL/Rust.
- ttfkam 4y agoEvent triggers fire on DDL changes, not DML. You're thinking of statement-level triggers. As far as event triggers and DO-blocks, that omission seems fine to me. Especially DO-blocks, which are essentially an inline code, one-off escape hatch in the middle of other SQL. Rust would not be helping any performance-sensitive critical paths in those cases.
- doctor_eval 4y agoTrue, but it’s sometimes useful for experimenting, REPL style.
- samanator 4y agoYou're right! My mistake. I was thinking of statement triggers. https://www.postgresql.org/docs/current/sql-createtrigger.html https://www.postgresql.org/docs/current/sql-createtrigger.ht... > The REFERENCING option enables collection of transition relations I don't see any examples of statement triggers...
- ttfkam 4y agohttps://stackoverflow.com/a/72397774 https://stackoverflow.com/a/72397774 Note the use of new_table and old_table as aliases. Instead of single records in NEW and OLD, you can select against new and old sets of records.
- samanator 4y agoI understand, and I've used the old and new table aliases. But I meant that I don't see a way to use those in the PL/Rust docs.
- pjmlp 4y agoStored procedures are compiled to native code in any respectfull RDMS (Oracle, SQL Server, DB2,...), and I assume same applies to PostgreSQL.