M A N N I N G Denis Magda Foreword by Josh Long Afterword by Vlad Mihalcea All the database you need
Some essential Postgres extensions for developers Category Extensions Description Postgres Beyond Relational (Extensions that let you use the database far beyond the tradi- tional relational workloads) pgvector The extension that turns Postgres into a vector database by storing vector embeddings, performing similarity searches, and providing specialized indexes for vectorized data. pgai Lets you generate embeddings, call LLMs, and run full RAG workflows directly inside Postgres without sepa- rate services. pgvectorscale Complements the pgvector exten- sion by enabling cost-efficient and high-performance vector search at scale through StreamingDiskANN index, statistical binary quantization, and other optimizations. TimescaleDB Enables Postgres for storing and analyzing large volumes of time-series and event data. PostGIS Transforms Postgres into a database capable of storing, indexing, and que- rying geospatial data. pgmq Allows to use Postgres as a lightweight message queue. pg_duckdb Enables high-performance analytical workloads for Postgres by integrating with DuckDB’s columnar-vectorized storage engine. Programming and Procedural Languages (Extensions that let you create database functions in your pre- ferred programming language) PLV8 Embeds V8 JavaScript engine into Postgres, allowing to write JavaScript- based database logic and call it from SQL. PL/Java PL/Python PL/Rust PL/dotnet PL/PHP PL/Perl PL/R PL/Haskel Extensions that let you implement database logic using various major programming languages, including Java, C#, Python, Rust, and more. (continues on the inside back cover) Licensed to Damian Allen <manning@pixerati.com>
MANN I NG Shelter ISland Denis Magda Just use Postgres! All the database you need Foreword by Josh Long Afterword by Vlad Mihalcea Licensed to Damian Allen <manning@pixerati.com>
For online information and ordering of this and other Manning books, please visit www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact Special Sales Department Manning Publications Co. 20 Baldwin Road PO Box 761 Shelter Island, NY 11964 Email: orders@manning.com © 2026 Manning Publications Co. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid- free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15 percent recycled and processed without the use of elemental chlorine. ∞ Manning Publications Co. 20 Baldwin Road PO Box 761 Shelter Island, NY 11964 ISBN 9781633435698 Printed in the United States of America The author and publisher have made every effort to ensure that the information in this book was correct at press time. The author and publisher do not assume and hereby disclaim any liability to any party for any loss, damage, or disruption caused by errors or omissions, whether such errors or omissions result from negligence, accident, or any other cause, or from any usage of the information herein. Development editor: Rebecca Senninger Technical editors: Josephine Bush, Stefan Papp Review editor: Dunja NikitoviÊ Production editor: Aleksandar DragosavljeviÊ Copy editor: Tiffany Taylor Proofreader: Mike Beady Typesetter: Tamara ŠveliÊ SabljiÊ Cover designer: Marija Tudor Licensed to Damian Allen <manning@pixerati.com>
To Postgres and its passionate users who just use it Licensed to Damian Allen <manning@pixerati.com>
iv contents foreword ix preface xi acknowledgments xiii about this book xv about the author xix about the cover illustration xx Part 1 Postgres as a relational database ............1 1 Meeting Postgres 3 1.1 Why is Postgres so popular? 4 1.2 “Just use Postgres!” explained 6 1.3 Starting Postgres in Docker 6 1.4 Connecting with psql 10 1.5 Generating mock data 11 1.6 Running basic queries 15 2 Standard RDBMS capabilities 18 2.1 Creating the database structure 19 Creating databases 20 ■ Creating schemas 22 Creating tables 25 2.2 Querying and manipulating data 27 Licensed to Damian Allen <manning@pixerati.com>
vcontents 2.3 Data integrity 29 Constraints 29 ■ Foreign keys 32 2.4 Transactions 36 Implicit transactions 36 ■ Explicit transactions 37 Multiversion concurrence control 39 2.5 Joins 42 2.6 Functions and triggers 44 Functions: A practical example 45 ■ Triggers: A practical example 51 2.7 Views 55 2.8 Roles and access control 59 3 Modern SQL 65 3.1 What is modern SQL? 66 3.2 Loading the music service dataset 67 3.3 Common table expressions 68 Selecting data with CTEs 69 ■ Using multiple CTEs in a query 70 ■ Modifying data with CTEs 73 3.4 Recursive queries 76 Querying hierarchical data 78 ■ Using arguments in recursion 80 3.5 Window functions 82 4 Indexes 89 4.1 Why are indexes so popular? 90 4.2 Overview of Postgres index types 92 4.3 Loading the multiplayer game dataset 93 4.4 Learning to use the EXPLAIN statement 95 4.5 Single-column indexes 99 Single-column B-tree indexes 99 ■ Single-column hash indexes 103 4.6 Composite indexes 107 Considering an additional single-column index 108 Creating a composite index 111 ■ Caveats of composite indexes 113 Licensed to Damian Allen <manning@pixerati.com>
vi contents 4.7 Covering indexes 117 4.8 Partial indexes 119 4.9 Functional and expression indexes 122 Part 2 Core Postgres beyond relational ......... 127 5 Postgres and JSON 129 5.1 Storing JSON data 130 5.2 Loading the pizza order dataset 131 5.3 JSON in Postgres: Striking the balance 134 5.4 Querying JSON data 136 Extracting fields with the -> and ->> operators 137 ■ Using the ? operator to check for the presence of a key 140 ■ Comparing objects with the @> operator 141 ■ Using JSON path expressions 143 5.5 Modifying JSON data 147 5.6 Indexing JSON data 150 Using an expression index with a B-tree 151 ■ Using GIN indexes 154 6 Postgres for full-text search 164 6.1 Basics of full-text search in Postgres 165 Tokenization and normalization 166 ■ Full-text search configurations 167 6.2 Preparing data for text search 171 Generating lexemes with the to_tsvector function 171 Storing tsvector lexemes in the database 173 6.3 Performing full-text search 177 Using plainto_tsquery for simple queries 177 ■ Using to_tsquery for advanced filtering 179 6.4 Ranking search results 182 6.5 Highlighting search results 188 6.6 Indexing lexemes 191 Using GIN indexes 192 ■ Using GiST indexes 194 Licensed to Damian Allen <manning@pixerati.com>
viicontents Part 3 Extensions and the broader ecosystem .. 199 7 Postgres extensions 201 7.1 The roots of Postgres extensibility 201 7.2 Getting started with extensions 202 Exploring available extensions 203 ■ Installing and using extensions 205 7.3 Essential extensions for developers 209 7.4 Postgres-compatible solutions 211 8 Postgres for generative AI 213 8.1 How to use Postgres with gen AI 214 Postgres and LLMs 214 ■ Postgres and embedding models 216 8.2 Starting Postgres with pgvector 218 8.3 Generating embeddings 220 Generating embeddings for movies 221 ■ Loading the final dataset into Postgres 223 8.4 Performing vector similarity search 226 Using cosine distance for similarity search 227 Changing the search phrase for better results 230 8.5 Indexing embeddings 232 Using IVFFlat indexes 234 ■ Using the HNSW index 240 8.6 Implementing RAG 245 Preparing the environment for the prototype 246 ■ Interacting with the LLM 247 ■ Retrieving context for LLM 248 Using RAG to answer questions 249 9 Postgres for time series 253 9.1 How Postgres works with time-series data 254 9.2 Starting Postgres with TimescaleDB 257 9.3 Loading the time-series data 259 9.4 Exploring TimescaleDB hypertables 262 9.5 Analyzing time-series data 266 Using the time_bucket function 267 ■ Using the time_bucket_gapfill function 271 9.6 Using continuous aggregates 274 Creating and using aggregates 274 ■ Refreshing aggregates 277 Licensed to Damian Allen <manning@pixerati.com>
viii contents 9.7 Indexing time-series data 279 Using a B-tree index 281 ■ Using BRIN indexes 284 10 Postgres for geospatial data 292 10.1 How Postgres works with geodata 293 Built-in Postgres capabilities 295 ■ Extended capabilities with PostGIS 296 10.2 Starting Postgres with PostGIS 297 10.3 Loading the OpenStreetMap dataset 300 Exploring tables with points 302 ■ Exploring tables with ways 303 ■ Exploring table with polygons 304 10.4 Visualizing geospatial data 305 10.5 Querying geospatial data 307 Working with points 309 ■ Working with polygons 314 Working with line segments 318 10.6 Indexing geospatial data 320 Understanding GiST structure 321 ■ Using a GiST index 325 11 Postgres as a message queue 332 11.1 When to use Postgres as a message queue 333 11.2 Building a custom message queue 335 11.3 Using a custom queue 339 11.4 Using LISTEN and NOTIFY 343 11.5 Queue implementation considerations 346 LISTEN and NOTIFY considerations 346 ■ Indexing considerations 347 ■ Partitioning considerations 348 Messages processing failover considerations 350 11.6 Starting Postgres with pgmq 350 11.7 Using pgmq 352 Creating and using a visitors queue 353 ■ Using message visibility timeouts 354 appendix A Five optimization tips 358 appendix B When not to use Postgres 369 afterword 371 index 373 Licensed to Damian Allen <manning@pixerati.com>
ix foreword The only way to have a friend is to be one. —Ralph Waldo Emerson This may seem like an unusual foreword for me to write, especially considering my repu- tation as a member of the Spring team. Spring is an application development framework utilized by millions to create robust systems and services on the Java Virtual Machine. Although I appreciate the nuances of Postgres, I am an application developer, not a data- base administrator or database engineer who would typically be invited to write a fore- word for a database-related book. But this book is written by a developer for developers. I fell in love with Postgres long ago because of all the amazing tools (and, let’s be honest, awe-inspiring toys) it offered me as an application developer and programmer. I loved it from very early on, but sometimes it felt like I was alone. Today, Postgres is a de facto standard in the industry. As the saying should go, “Nobody ever got fired for deploying Postgres.” But let me tell you, being a Postgres enthusiast hasn’t always been easy. I began my professional journey as a software engineer in 2002, a time when MySQL roamed the earth. It was MySQL, not Postgres, that was the go-to database of choice. MySQL was the emerging standard. It was the M in the LAMP Stack, after all! Its popu- larity was undeniable. And as appealing as Postgres was for me, an application developer, application devel- opers aren’t the only ones who get to choose a database. There were several reasons MySQL was in vogue: ¡ MySQL was easy to get up and running for development. It was preinstalled on every Linux distribution I could lay my hands on, and it was the go-to option for open source projects. It ran on everything, even Windows. Postgres, on the other hand, didn’t even have a Windows build until 2005, almost eight years after MySQL did. Licensed to Damian Allen <manning@pixerati.com>
x foreword ¡ MySQL was easy to run in production. MySQL was easy to configure, it had solid administration tools, and it had relatively straightforward built-in asynchronous replication. Postgres didn’t even have native replication until version 9.0! ¡ MySQL was battle-tested by large-scale web applications. Did you know that Google used MySQL as the engine for AdWords (now called Google Ads)? That’s right, the Google “cash register” was powered by MySQL! Amazing! And Facebook used MySQL as a fundamental part of its core infrastructure. Who wouldn’t want to use such a database? It’s the best! It’s “we scale”! Or so everyone kept remind- ing me. And Postgres? Only the brave dared to use it for large-scale workloads. MySQL was all the rage, it was the only one folks felt like they could run in production, and it was the only one developers could readily get access to. (Remember, 2002 was long before Docker and long before developers ran virtual machines locally.) It wasn’t easy being Postgres’s friend! But all of that is in the past now, and here we are: in 2025, surfing the tidal wave of Postgres’s popularity. It’s finally happened: Postgres is the friend we always knew it could be, not just for application developers, but for operations, too. It’s easy to get started using it, and it’s easy to deploy and scale. For the person looking at Postgres today, the questions that should be top of mind are those same things that mesmerized me decades ago: What can you build with Postgres? And how? I’ll answer the first question: What can you build with Postgres? Just about anything you want! And the second question: How can you build with Postgres? You’ll get no better or more pragmatic an answer than by reading the book in your hands right now. Denis Magda has written the developer’s guide to Postgres for today. The one where we can take for granted how easy it is to set up, deploy, and build on Postgres. The one where Postgres is as good a friend to me as I was to it. The Postgres that enjoys the larg- est ecosystem of extensions, plugins, and integrations of any modern database, by far. The Postgres that has been hacked, sliced, diced, and improved in a million different ways by countless contributors in the space. Denis knows Postgres inside and out, having spent a lot of time working at different layers of Postgres’s evolution. Denis knows how to build anything on Postgres, and this is his recipe book. I have been following this book’s evolution for more than a year, waiting eagerly for the updates to the manuscript, because the chapters always teach me something new and remind me of the exciting reasons I fell in love with Postgres in the first place as an application developer. It’s easy to be a Postgres friend today, and this book will help you quickly strike up a friendship that lasts. Thanks, Denis. —Josh Long Application developer and big Postgres fan Spring Developer Advocate, Java Champion, Microsoft MVP, Kotlin GDE Alumnus, etc. Licensed to Damian Allen <manning@pixerati.com>
xi preface It was yet another hot sunny day in Florida when I met Alex, a close friend of mine, for lunch. Although we lived in the same city, it had been a while since we last met. With more kids and mounting responsibilities, meetings like this had become rare. We had less than an hour to share news about the summer with our kids, the quiet hurricane season, and work projects. We are both in tech, so it’s not surprising that most of our time was spent discussing work-related matters. And Alex told me about one challenge he had been dealing with, which eventually convinced me that this book had to be written: Alex: I have to migrate that application to a public cloud by the end of the month, and the problem is the database. Denis: What’s wrong with the database? Alex: Our database administration team doesn’t manage this specific data- base in the cloud. So, if I migrate the database there, it’s going to be me who needs to take care of all the administration and maintenance tasks. Denis: Which databases do they provide support for in the cloud? Alex: Postgres is one option. Denis: Why can’t you use Postgres then? Just rewrite the data layer of the app. You’ve done that more than once. Alex: Well, the application’s data model is built around documents. It stores and exchanges data in the JSON format. The current database fits exceptionally well for this use case. Switching to Postgres would mean Licensed to Damian Allen <manning@pixerati.com>
xii preface transitioning to the relational model, which would require giving up the flexibility of the JSON-based document model. Denis: Postgres supports JSON. You can continue benefiting from the documents- based design. Alex: Silence. He looked at me, puzzled. Denis: I’m not joking. JSON is a first-class citizen in Postgres. The database stores it efficiently, provides special functions and operators for querying and modifying document structure, and comes with specialized index types that make searches through the documents fast. Alex: This is great! Looks like a lot has changed since the last time I used Postgres … That exact conversation convinced me this book needed to be written. Alex was not new to Postgres. We both started using the database more than 15 years ago while working together on high-load web applications. We knew how to use it—at least, its relational capabilities. After finishing lunch and giving my friend a hug, I asked myself the following ques- tion: “If Alex, a senior-level technical guru, didn’t know what Postgres is capable of these days, then how many software engineers who are entering the tech space or have worked in it for years don’t know what Postgres is truly capable of?” So, I began thinking about the book idea. I took notes and jotted down ideas. Most importantly, I kept meet- ing people who were both surprised and happy to discover what Postgres offers now. That continued until one day I jumped on a video call with Jonathan Gennick, an acqui- sition editor at Manning … and now you’re reading the result of that conversation. Licensed to Damian Allen <manning@pixerati.com>
xiii acknowledgments This book lists me as the author, but that doesn’t mean it is solely my book. Only through the implicit and direct contributions of dozens of people did the book come into existence. Without their support, inspiration, and collaboration, I would not have started or finished this long project. Writing a book is hard to begin and even harder to finish, which makes the help and involvement of others crucial. First, I would like to thank all those who inspired me by showing the power of teaching and education. My dear Grandma Lubov Krivobok, a world-class chemistry teacher who continues to work with high school students in her late 80s, preparing them for high- ranked medical universities and academies; and my dear aunt, Oksana Semochkina, and uncle, Alexander Semochkin, both PhDs in mathematics, who dedicated them- selves to raising the next generation of mathematicians and software engineers: you three showed me that true teaching is a craft and that if someone decides to share their knowledge, they must do so with complete dedication. Second, I would like to thank those who supported me throughout this project: my lovely wife, Elena, and our two adorable but mischievous boys, Lev and Chris. This book was a sacrifice for all of us. We didn’t have a proper vacation. We could have spent much more time together. But we’ll catch up. The book helped me realize that family is even more important to me than I thought. I love you. Third, I want to thank those who worked with me on the book and who will continue to do so even after it’s published. To the exceptional Manning team, thank you! I’m grate- ful to Jonathan Gennick, who listened to my book proposal, believed in it, and gave me the chance. I owe a great deal to Rebecca Senninger, Tiffany Taylor, Mike Beady, and many others who worked with me on the chapters and helped make them much better. I want to thank Josephine Bush, a Microsoft Data Platform MVP, and Stefan Papp, an Licensed to Damian Allen <manning@pixerati.com>
xiv acknowledgments author and university educator, who worked as technical editors on the book. Finally, I am thankful to the many independent experts and professionals who volunteered to read the book drafts and provided invaluable feedback: Ajinkya Kadam, Akshay Phadke, Al Pezewski, Alessandro Puzielli, Alex Elistratov, Anil Kumar Moka, Annamalai Muru- ganathan, Benjamin Lis, Brandon Friar, Charly Batista, Deep Bodra, Diego Alonso, Eti- enne de Maricourt, Frits Hoogland, Garry Offord, Gayathri Vijayan, Gregorio Piccoli, Jeff Marcus, Johannes Lochmann, John Harrop, Josh Kelley, Lukas Vileikis, Nadir Doc- tor, Nate Clark, Philip Patterson, Ravi Kiran Magham, Ron Lease, Ronald Goodwin, Ronald Harmsen, Saurabh Aggarwal, Sophia Willows, Vlad Mihalcea, and William LeB- orgne. Your suggestions helped make this a better book. Finally, thank you, dear reader, for choosing this book and dedicating your time to learning Postgres. I hope our teamwork will meet your expectations! Licensed to Damian Allen <manning@pixerati.com>
xv about this book In 2009, I graduated from university and landed my first full-time job as a Java devel- oper. Our team chose Postgres for a high-load web application I had yet to build. In those days, Postgres lacked many features, and few people considered using it. Still, we placed our trust in it, and since then it has never let me down. Over the years, I changed jobs and companies, but Postgres remained my default database. I continued learning it gradually while using it on various projects, although I mostly saw it as a relational database for transactional workloads. In early 2022, I joined the Yugabyte team, which builds a distributed version of Post- gres. That’s when I discovered a different Postgres: one that supports full-text search, powers geospatial applications, and enables generative AI. I realized Postgres could do much more than I had expected from it as a relational database. I rediscovered Postgres by reading countless blog posts, watching endless videos, and having many conversations with community members. At some point, I asked myself why there wasn’t a book to introduce the breadth and depth of Postgres capabilities. It felt strange that such a book didn’t exist, given the database’s growing popularity. Even- tually, I decided to contribute to Postgres by writing that book myself. This book introduces you to the core and extended Postgres capabilities in a practical manner. Think of every chapter as a dedicated hands-on developer guide. Each chap- ter is full of practical examples that let you study specific capabilities in action. You’re expected to start Postgres and run code samples as you read. This matters, because once you finish a chapter, I want you to have this feeling: “Excellent! Postgres can really do X, and I’ve just experienced it myself! I did that on my own machine!” where X is the capability the chapter focuses on. Finally, I’d like to set clear expectations about what this book does and doesn’t cover: Licensed to Damian Allen <manning@pixerati.com>
xvi about this book ¡ The book doesn’t cover all existing Postgres capabilities. Instead, it walks you through some of the most prominent features that are widely used. And the book does this at a fast pace, because the goal is not to learn all the ins and outs of a particular capability, but to introduce you to it and make sure you know how to start using it in your applications. ¡ This book is not an in-depth guide on deployment, optimization, scalability, secu- rity, or other best practices. Each chapter could be a book on its own, but I’ve kept them to 30–40 pages so you can finish them in a few evenings. More impor- tantly, I’ve purposefully avoided going too deep into details so you can enjoy the process, run the code, see results, feel successful, and trust Postgres for the use case. Once you’ve chosen Postgres for the use case, you can always dive deeper by referring to other resources. ¡ This book doesn’t compare Postgres to other databases or data platforms. That’s deliberate: the focus is on exploring Postgres, regardless of how it stacks up against other technologies. Who should read this book The primary audience for this book is application developers, software engineers, and architects—those who are responsible for designing and building applications. Data- base administrators may find it less valuable, because the book doesn’t focus on Post- gres deployment, configuration, and maintenance best practices and aspects. The book suits both newcomers to Postgres and experienced users. If you’re new to Postgres, you should know the basics of SQL and relational databases. At a mini- mum, you should know how to create tables, populate them with data, and modify or query records using SQL. If you’re an experienced Postgres user, you can broaden and deepen your understanding of the database by reading the chapters that interest you most. How this book is organized: A roadmap This book is divided into 3 parts, 11 chapters, and 2 appendices, each highlighting distinct Postgres capabilities. The first part comprises four chapters that cover core features common to most relational database management systems. The second part examines core Postgres capabilities that go beyond relational workloads: JSON sup- port and full-text search. The third part focuses on Postgres extensions that enable the database to handle generative AI, time series, and other scenarios. Here is a brief overview of each chapter and appendix: ¡ Chapter 1 provides a quick introduction to Postgres and explains why it became so popular. The chapter also demonstrates how to start Postgres in Docker, con- nect to the database, generate mock data, and run a few basic SQL queries. ¡ Chapter 2 explores widely used Postgres capabilities commonly supported by relational databases. You learn how to design database structure; perform queries Licensed to Damian Allen <manning@pixerati.com>
xviiabout this book and updates; use transactions, triggers, and views; maintain data integrity; and secure data access. ¡ Chapter 3 covers modern SQL capabilities of Postgres, including common table expressions, recursive queries, and window functions. ¡ Chapter 4 discusses various Postgres index types and shows how to optimize perfor- mance with single-column, composite, partial, covering, and functional indexes. ¡ Chapter 5 examines Postgres’s JSON capabilities by showing how to store JSON objects in the database, query and modify JSON structures with built-in operators and functions, and optimize searches with GIN and B-tree indexes. ¡ Chapter 6 demonstrates how to use Postgres’s full-text search capabilities by con- verting textual data into lexemes, performing the search with specialized func- tions and operators, and optimizing performance with GIN and GiST indexes. ¡ Chapter 7 introduces the Postgres extension ecosystem, discusses different types of extensions, and shows how to use one extension that comes preinstalled with the standard Postgres distribution. ¡ Chapter 8 explores Postgres’s capabilities for generative AI, demonstrates how to use the pgvector extension to store and query vector embeddings, and shows how to implement retrieval-augmented generation and optimize performance with HNSW and IVFFlat indexes. ¡ Chapter 9 highlights Postgres’s capabilities for time-series workloads, shows how to use the TimescaleDB extension to manage and analyze time-series data, and demonstrates how to optimize queries with B-tree and BRIN indexes. ¡ Chapter 10 covers the PostGIS extension that enables Postgres for geospatial workloads by allowing storage and querying of location-based data, visualizing geographic information with specialized tools, and optimizing searches with spa- tial indexes backed by GiST, SP-GiST, or BRIN. ¡ Chapter 11 explains when, why, and how to use Postgres as a message queue. It demonstrates how to implement a custom queue using Postgres’s built-in capa- bilities or use the pgmq extension, which provides a ready-to-use message queue implementation. ¡ Appendix A provides a quick overview of my top five query optimization tips to help you write more efficient code and design better solutions with Postgres. ¡ Appendix B gives you some guidance on when you should refrain from using Postgres. If you’re new to Postgres, I suggest starting with the first four chapters, which cover capabilities common to most relational databases. After that, feel free to jump to any chapter that interests you. If you’re an experienced Postgres user, you can pick any chapter you like. If you plan to explore chapters 2–7, briefly review the beginning of chapter 1, which shows how to start a Postgres instance in Docker that is reused in those chapters. Licensed to Damian Allen <manning@pixerati.com>
xviii about this book About the code This book contains many examples of source code both in numbered listings and in line with normal text. In both cases, source code is formatted in a fixed-width font like this to separate it from ordinary text. In many cases, the original source code has been reformatted; we’ve added line breaks and reworked indentation to accommodate the available page space in the book. In rare cases, even this was not enough, and listings include line-continuation markers (➥). You can get executable snippets of code from the liveBook (online) version of this book at https://livebook.manning.com/book/just-use-postgres. The complete code for the examples in the book is available for download from the Manning website at https://www.manning.com/books/just-use-postgres and from GitHub at https:// github.com/dmagda/just-use-postgres-book. liveBook discussion forum Purchase of Just use Postgres! includes free access to liveBook, Manning’s online read- ing platform. Using liveBook’s exclusive discussion features, you can attach comments to the book globally or to specific sections or paragraphs. It’s a snap to make notes for yourself, ask and answer technical questions, and receive help from the author and other users. To access the forum, go to https://livebook.manning.com/book/just-use -postgres/discussion. Manning’s commitment to our readers is to provide a venue where meaningful dia- logue between individual readers and between readers and authors can take place. It is not a commitment to any specific amount of participation on the part of the author, whose contribution to the forum remains voluntary (and unpaid). We suggest that you try asking the author some challenging questions lest his interest stray! The forum and the archives of previous discussions will be accessible on the publisher’s website for as long as the book is in print. Author online Denis Magda can be found online at the following platforms: ¡ Twitter: https://x.com/denismagda ¡ LinkedIn: https://www.linkedin.com/in/dmagda/ ¡ YouTube: https://www.youtube.com/@DevMastersDb ¡ Blog: https://medium.com/@magda7817 ¡ GitHub: https://github.com/dmagda Licensed to Damian Allen <manning@pixerati.com>
Comments 0
Loading comments...
Reply to Comment
Edit Comment