From ea062a38bc3e46b3c2ccd28b8cb7fbc41b013a20 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Mon, 29 Nov 2021 18:32:41 +0800 Subject: [PATCH] chore: add thumb and og image --- .../2021-11-28-whats-new-in-postgres-14.mdx | 119 +++++++++--------- .../explain-statement.png | Bin .../whats-new-in-postgres-14-og.png | Bin 0 -> 21330 bytes .../whats-new-in-postgres-14-thumb.png | Bin 0 -> 27946 bytes www/public/rss.xml | 2 +- 5 files changed, 58 insertions(+), 63 deletions(-) rename www/public/images/blog/{new-in-pg-14 => whats-new-in-postgres-14}/explain-statement.png (100%) create mode 100644 www/public/images/blog/whats-new-in-postgres-14/whats-new-in-postgres-14-og.png create mode 100644 www/public/images/blog/whats-new-in-postgres-14/whats-new-in-postgres-14-thumb.png diff --git a/www/_blog/2021-11-28-whats-new-in-postgres-14.mdx b/www/_blog/2021-11-28-whats-new-in-postgres-14.mdx index b7213dad70e..ea1bc07e874 100644 --- a/www/_blog/2021-11-28-whats-new-in-postgres-14.mdx +++ b/www/_blog/2021-11-28-whats-new-in-postgres-14.mdx @@ -1,29 +1,28 @@ --- -title: "New in PostgreSQL 14: What every developer should know" -description: "A quick look at some new features and functionality in PostgreSQL 14." +title: 'New in PostgreSQL 14: What every developer should know' +description: 'A quick look at some new features and functionality in PostgreSQL 14.' author: gurjeet author_url: https://github.com/gurjeet author_image_url: https://github.com/gurjeet.png authorURL: https://github.com/gurjeet -image: launch-week-3/launch-week-3-og.jpg -thumb: launch-week-3/launch-week-3-thumb.jpg +image: whats-new-in-postgres-14/whats-new-in-postgres-14-og.png +thumb: whats-new-in-postgres-14/whats-new-in-postgres-14-thumb.png tags: - tech date: '2021-11-28' toc_depth: 2 --- - -Every web developer knows the importance of choosing a suitable database for building modern apps. -Even though NoSQL, NewSQL, and other types of databases have received a great deal of buzz in the last few years, -relational database management systems (or RDBMS) are still relevant for several critical business use cases and will likely do so in the foreseeable future. -Among the many open-source relational databases available, [PostgreSQL](https://supabase.com/docs/guides/database/introduction) is a popular choice among developers. -It was named [DBMS of the year in 2020](https://db-engines.com/en/blog_post/85) by +Every web developer knows the importance of choosing a suitable database for building modern apps. +Even though NoSQL, NewSQL, and other types of databases have received a great deal of buzz in the last few years, +relational database management systems (or RDBMS) are still relevant for several critical business use cases and will likely do so in the foreseeable future. +Among the many open-source relational databases available, [PostgreSQL](https://supabase.com/docs/guides/database/introduction) is a popular choice among developers. +It was named [DBMS of the year in 2020](https://db-engines.com/en/blog_post/85) by DBEnginges, and with every release of PostgreSQL new features are available making it easy for developers and administrators to run their apps. This blog will highlight some key features of the newly available PostgreSQL 14, which every developer can benefit from. So, let's dive right in. -## Complex data type support +## Complex data type support ### JSON subscripting @@ -34,18 +33,18 @@ select ( '{ "PostgreSQL": { "release": 14 }}'::jsonb )['PostgreSQL']['release']; - jsonb + jsonb ------- 14 - ``` +``` ### Working with disjointed data ranges -In the real world, data ranges are pretty common. For example, if you have sensor readings going into a PostgreSQL database, you may want to define a range for -low, medium, and high metrics. Before version 14, you could set data ranges for integers, numerics, timestamps, and other data types. -However, these ranges had to be contiguous, and it required multiple insert records across the different ranges. +In the real world, data ranges are pretty common. For example, if you have sensor readings going into a PostgreSQL database, you may want to define a range for +low, medium, and high metrics. Before version 14, you could set data ranges for integers, numerics, timestamps, and other data types. +However, these ranges had to be contiguous, and it required multiple insert records across the different ranges. In PostgreSQL 14, a single insert statement can be used to map data across multiple noncontiguous ranges. Let's check it out with an example. - + First, create an enum data type to capture low, medium, and high sensor reading levels. ```sql hideCopy @@ -53,53 +52,52 @@ create type valid_levels as enum ( 'low', 'medium', 'high' ); ``` - + To store sensor reading metric data, create a table consisting of the sensor description, the level and the range of timestamps when the sensor was at that level. - + ```sql hideCopy -create table sensor_range ( - reading_id serial primary key, +create table sensor_range ( + reading_id serial primary key, metric_desc varchar(100), - metric_level valid_levels, + metric_level valid_levels, metric_ts tsmultirange ); ``` - -Now, insert some data into the table. Note that, the insert statement below provides two time ranges that are not contiguous. - - + +Now, insert some data into the table. Note that, the insert statement below provides two time ranges that are not contiguous. + ```sql hideCopy insert into sensor_range ( metric_desc, - metric_level, + metric_level, metric_ts -) +) values ( - 'Temperature', - 'high', + 'Temperature', + 'high', '{[2021-11-01 6:00, 2021-11-01 10:00],[2021-11-05 14:00, 2021-11-05 20:00]}' ); insert into sensor_range ( metric_desc, - metric_level, + metric_level, metric_ts -) +) values ( - 'Temperature', - 'low', + 'Temperature', + 'low', '{[2021-11-01 10:00, 2021-11-01 12:00],[2021-11-05 21:00, 2021-11-05 22:00]}' ); ``` Query the data in the table to see the inserted data rows - -```sql hideCopy -select * -from sensor_range; -``` -``` hideCopy +```sql hideCopy +select * +from sensor_range; +``` + +```hideCopy | `reading_id` | `metric_desc` | `metric_level` | `metric_ts` | |--------------|---------------|----------------|-----------------------------------------------------------------------------| | 1 | Temperature | high | {[2021-11-01 6:00, 2021-11-01 10:00],[2021-11-05 14:00, 2021-11-05 20:00]} | @@ -110,26 +108,24 @@ from sensor_range; ### Query pipelining -If you're a developer accessing PostgreSQL using a high-level programming language, the database driver you're using is likely based on a C library called libpq. For example, suppose your application performs several write operations within a short period, or your network has a higher latency. In that case, you may want to fire off several queries over the same network connection simultaneously, so you don't have to wait for a reply after each query. Under the hood, libpq can send multiple queries to PostgreSQL while maintaining a queue of queries that are waiting for results. This queue consumes additional memory on both the client and server. Developers can now take advantage of PostgreSQL 14's client-side query pipeline mode using clients built on top of the latest libpq library to accelerate app performance. - -Aside from query pipelining, the latest PostgreSQL 14 release brings several other enhancements to query parallelism, including improved performance of parallel sequential scans, parallel query execution capabilities for Foreign Data Wrappers, and the ability to run parallel queries when refreshing materialized views. With this, your PostgreSQL server can now do more work for you at a lower cost. +If you're a developer accessing PostgreSQL using a high-level programming language, the database driver you're using is likely based on a C library called libpq. For example, suppose your application performs several write operations within a short period, or your network has a higher latency. In that case, you may want to fire off several queries over the same network connection simultaneously, so you don't have to wait for a reply after each query. Under the hood, libpq can send multiple queries to PostgreSQL while maintaining a queue of queries that are waiting for results. This queue consumes additional memory on both the client and server. Developers can now take advantage of PostgreSQL 14's client-side query pipeline mode using clients built on top of the latest libpq library to accelerate app performance. -### Monitoring and troubleshooting queries +Aside from query pipelining, the latest PostgreSQL 14 release brings several other enhancements to query parallelism, including improved performance of parallel sequential scans, parallel query execution capabilities for Foreign Data Wrappers, and the ability to run parallel queries when refreshing materialized views. With this, your PostgreSQL server can now do more work for you at a lower cost. -Ask any database troubleshooting expert, and they will tell you that without a way to correlate data across different database components, investigating and monitoring query-related issues can quickly become a nightmare. When it comes to PostgreSQL, the SQL statement’s query_id can be used for this purpose, allowing database experts an easy way to identify workload patterns quickly, detect rogue run-away or slow queries, and common query-related issues. Before PostgreSQL 14, this information was only available using the pg_stat_statements [extension](https://supabase.com/docs/guides/database/extensions), which shows aggregate statistics about queries that have finished executing, but now this information is additionally available for live running queries with pg_stat_activity, in the EXPLAIN VERBOSE statement, and log files. +### Monitoring and troubleshooting queries + +Ask any database troubleshooting expert, and they will tell you that without a way to correlate data across different database components, investigating and monitoring query-related issues can quickly become a nightmare. When it comes to PostgreSQL, the SQL statement’s query_id can be used for this purpose, allowing database experts an easy way to identify workload patterns quickly, detect rogue run-away or slow queries, and common query-related issues. Before PostgreSQL 14, this information was only available using the pg_stat_statements [extension](https://supabase.com/docs/guides/database/extensions), which shows aggregate statistics about queries that have finished executing, but now this information is additionally available for live running queries with pg_stat_activity, in the EXPLAIN VERBOSE statement, and log files. An example of using query_id IN EXPLAIN (VERBOSE) statement Start by altering the system to enable the query_id - ```sql hideCopy alter system set compute_query_id = 'on'; ``` Restart the PostgreSQL database for the alter system statement to take effect. - -Run the following query that selects schema and table names from the catalog tables +Run the following query that selects schema and table names from the catalog tables ```sql hideCopy explain (verbose, costs off) @@ -138,9 +134,9 @@ from pg_tables, pg_sleep(5) where schemaname <> 'pg_catalog'; ``` -View the result of the EXPLAIN statement +View the result of the EXPLAIN statement -![View the result of the EXPLAIN statement](/images/blog/new-in-pg-14/explain-statement.jpg) +![View the result of the EXPLAIN statement](/images/blog/whats-new-in-postgres-14/explain-statement.jpg) Notice that the query identifier is in the output:
`Query Identifier: 4856400161806292488` @@ -149,23 +145,22 @@ Notice that the query identifier is in the output:
Security remains top of mind for every organization, and PostgreSQL 14 brings some critical enhancements in this area. -Have you ever wanted to [manage database user access](https://supabase.com/docs/guides/auth/managing-user-data) so that only specific individuals have read-only access? For example, consider a situation where you would like to host some sample data online for a demo and not allow demo users to modify or delete data. With the latest PostgreSQL version 14, you can easily set that up using a single GRANT statement. +Have you ever wanted to [manage database user access](https://supabase.com/docs/guides/auth/managing-user-data) so that only specific individuals have read-only access? For example, consider a situation where you would like to host some sample data online for a demo and not allow demo users to modify or delete data. With the latest PostgreSQL version 14, you can easily set that up using a single GRANT statement. ```sql hideCopy grant pg_read_all_data to bobfries; ``` - -From an authentication perspective, if you're still managing passwords in the database without [third-party login providers](https://supabase.com/docs/guides/auth#third-party-logins), -you may want to read this. Since version 10, PostgreSQL supports several different hashing mechanisms such as MD5 and SCRAM-SHA-256 to store user passwords on disk. -However, to keep up with the [latest security weaknesses around MD5](https://en.wikipedia.org/wiki/MD5#Security) and meet regulatory compliance requirements, -PostgreSQL 14 has made SCRAM-SHA-256 the default password management mechanism. So, if you are using old PostgreSQL client software, -you may want to update it, to be able to connect to the newer versions of the database server. + +From an authentication perspective, if you're still managing passwords in the database without [third-party login providers](https://supabase.com/docs/guides/auth#third-party-logins), +you may want to read this. Since version 10, PostgreSQL supports several different hashing mechanisms such as MD5 and SCRAM-SHA-256 to store user passwords on disk. +However, to keep up with the [latest security weaknesses around MD5](https://en.wikipedia.org/wiki/MD5#Security) and meet regulatory compliance requirements, +PostgreSQL 14 has made SCRAM-SHA-256 the default password management mechanism. So, if you are using old PostgreSQL client software, +you may want to update it, to be able to connect to the newer versions of the database server. ## It's only the tip of the iceberg -Indeed, there's a lot more to explore in the latest PostgreSQL, and we've barely scratched the surface of what PostgreSQL 14 has to offer. -There's no better way to experience some of these features than by trying them out for yourself. -You can check out these new features within your Supabase project without having to perform a local installation. - -Explore the [Supabase dashboard now](https://app.supabase.io) and get started with your new project. +Indeed, there's a lot more to explore in the latest PostgreSQL, and we've barely scratched the surface of what PostgreSQL 14 has to offer. +There's no better way to experience some of these features than by trying them out for yourself. +You can check out these new features within your Supabase project without having to perform a local installation. +Explore the [Supabase dashboard now](https://app.supabase.io) and get started with your new project. diff --git a/www/public/images/blog/new-in-pg-14/explain-statement.png b/www/public/images/blog/whats-new-in-postgres-14/explain-statement.png similarity index 100% rename from www/public/images/blog/new-in-pg-14/explain-statement.png rename to www/public/images/blog/whats-new-in-postgres-14/explain-statement.png diff --git a/www/public/images/blog/whats-new-in-postgres-14/whats-new-in-postgres-14-og.png b/www/public/images/blog/whats-new-in-postgres-14/whats-new-in-postgres-14-og.png new file mode 100644 index 0000000000000000000000000000000000000000..b857fb4b808cc91799a0103ac019a13101dc80fe GIT binary patch literal 21330 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 OET$W`Zb)126#75$#`X*V literal 0 HcmV?d00001 diff --git a/www/public/rss.xml b/www/public/rss.xml index bf7a2652333..787acdd9b85 100644 --- a/www/public/rss.xml +++ b/www/public/rss.xml @@ -10,7 +10,7 @@ https://supabase.com/blog/2021/11/28/whats-new-in-postgres-14 - New in PostgreSQL 14 : What every developer should know. + New in PostgreSQL 14: What every developer should know https://supabase.com/blog/2021/11/28/whats-new-in-postgres-14 A quick look at some new features and functionality in PostgreSQL 14. Sat, 27 Nov 2021 16:00:00 GMT