# Writing Safe PostgreSQL Extensions with Rust using PGRX
> [! note]-
> The content of this page is generated by audio/video transcription and text transformation from the content and links of this source.
Source: [https://fosdem.org/2025/schedule/event/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/](https://fosdem.org/2025/schedule/event/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/)
<video src="https://video.fosdem.org/2025/ub2252a/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide.av1.webm" controls></video>
## Summary & Highlights:
This session at FOSDEM 2025 explores writing PostgreSQL extensions in Rust, focusing on the PGRX framework. It covers memory safety, integration with Rust's ecosystem, and practical examples. Damien Clochard shares his experience rewriting the PostgreSQL Anonymizer extension from C to Rust, highlighting the benefits of using Rust for database extensions.
**Introduction to PostgreSQL Extensions**
PostgreSQL is renowned for its extensibility, allowing developers to tailor the database to specific needs through extensions. Traditionally written in C, these extensions can be prone to security vulnerabilities and require regular maintenance to keep up with PostgreSQL updates.
**The Rise of Rust in Database Development**
Rust is gaining popularity for its robust memory safety features, making it an ideal choice for writing database extensions. The PGRX framework bridges Rust and PostgreSQL, providing a safer and more efficient development environment. With Rust, developers can leverage a vast ecosystem of libraries, ensuring seamless integration and improved performance.
**Practical Examples with PGRX**
The session showcases practical examples using the PGRX framework, demonstrating how Rust can be used to write safe and performant PostgreSQL extensions. These examples illustrate the ease of development and the safety features inherent in Rust, making it an attractive option for database developers.
**Lessons from Rewriting PostgreSQL Anonymizer**
Damien Clochard shares insights from his journey of rewriting the PostgreSQL Anonymizer extension in Rust. The transition from C to Rust brought immediate gains in stability and performance, reducing the risk of crashes and improving code maintainability. Despite initial challenges, the switch to Rust proved beneficial, offering a modern development experience.
**Conclusion: Embracing Rust for a Safer Future**
The session concludes by emphasizing the advantages of using Rust for PostgreSQL extensions. As a modern language with strong community support, Rust enables developers to create safer, more efficient database solutions. The PGRX framework provides the tools needed to harness Rust's potential, paving the way for a new generation of database extensions.
## Importance for an eco-social transformation
The session highlights the importance of using Rust for safer and more efficient database extensions, which is crucial for eco-social transformation. By enhancing security and reducing maintenance, Rust contributes to the sustainability of open-source projects. Eco-social designers can apply these principles by adopting Rust for developing secure and stable software solutions. Challenges include the learning curve associated with Rust and the integration of existing systems with new technologies. However, the strong community support and open-source nature of Rust provide a foundation for overcoming these hurdles.
## Slides:
| | |
| --- | --- |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_001.jpg\|300]] | The first slide introduces the session on writing safe PostgreSQL extensions using Rust, emphasizing the importance of safety and modern development practices.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_002.jpg\|300]] | Damien Clochard, co-founder of DALIBO and an active member of the French PostgreSQL community, is the main developer of the PostgreSQL Anonymizer extension.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_003.jpg\|300]] | Damien Clochard shares his journey, having discovered PostgreSQL 25 years ago and Rust just last year, highlighting his recent transition to using Rust for development.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_004.jpg\|300]] | Damien recounts the story of starting the PostgreSQL Anonymizer project in 2018, initially using C and later rewriting it in Rust, marking a significant shift in his development approach.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_005.jpg\|300]] | The session menu outlines the topics covered, including an introduction to PostgreSQL extensions, the PGRX framework, a practical example, lessons learned, and the future of PostgreSQL with Rust.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_006.jpg\|300]] | The slide emphasizes the versatility and capability of PostgreSQL as a platform, encouraging its use for various applications beyond just a database.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_007.jpg\|300]] | PostgreSQL is presented as a platform rather than just a database, with a wide range of extensions supporting graphs, geo data, OLAP, NoSQL, AI, ETL, timeseries, full text search, and more.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_008.jpg\|300]] | The slide highlights PostgreSQL's unique ecosystem, with over 1000 known extensions, around 250 of which are active and maintained, showcasing its extensibility.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_009.jpg\|300]] | A PostgreSQL extension is defined as a combination of SQL objects, procedural language code, and/or a compiled library, illustrating its flexibility.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_010.jpg\|300]] | Writing an extension in SQL or procedural language code is described as easy, fast, and a great way to share code between databases while maintaining stability across major versions.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_011.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_012.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_013.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_014.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_015.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_016.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_017.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_018.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_019.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_020.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_021.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_022.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_023.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_024.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_025.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_026.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_027.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_028.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_029.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_030.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_031.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_032.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_033.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_034.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_035.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_036.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_037.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_038.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_039.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_040.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_041.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_042.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_043.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_044.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_045.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_046.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_047.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_048.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_049.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_050.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_051.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_052.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_053.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_054.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_055.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_056.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_057.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_058.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_059.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_060.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_061.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_062.jpg\|300]] | |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_063.jpg\|300]] | |
## Links
[Video recording (AV1/WebM)](https://video.fosdem.org/2025/ub2252a/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide.av1.webm)
[Video recording (MP4)](https://video.fosdem.org/2025/ub2252a/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide.av1.mp4)
[Slides](https://fosdem.org/2025/events/attachments/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/slides/238202/writing_p_EGMYZay.pdf)