{"id":5145,"date":"2015-05-10T12:33:57","date_gmt":"2015-05-10T10:33:57","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/"},"modified":"2015-05-10T12:33:57","modified_gmt":"2015-05-10T10:33:57","slug":"bulk-loading-semi-structured-data-in-postgresql","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/","title":{"rendered":"bulk loading semi structured data in postgresql"},"content":{"rendered":"<p>The <a href=\"\/the-fastest-way-to-load-1m-rows-in-postgresql\" target=\"_blank\">last post<\/a> took a look at how to efficiently load 1m rows into a table in PostgreSQL. In this post I&#8217;ll take a look on how to do the same with semi structured data.<br \/>\n<img decoding=\"async\" id=\"system-readmore\" class=\"mceItemReadMore\" title=\"Read More\" src=\"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif\" alt=\"Read More\" \/><br \/>\nAgain it is the same system as in the last post using the same PostgreSQL parameters.<\/p>\n<h3>Using the hstore datatype<\/h3>\n<p>For storing key\/value pairs there is the <a href=\"http:\/\/www.postgresql.org\/docs\/current\/static\/hstore.html\" target=\"_blank\">hstore extension<\/a> in PostgreSQL.<br \/>\nUsing the same sample data as in the last post this is the script to load 1m of key\/value rows:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">\\timing off\ncreate extension if not exists hstore;\ndrop table demo_hstore;\ncreate table demo_hstore ( document hstore );\n\\timing on\nDO $$DECLARE\n  l_people_array varchar(15)[12] := '{\"Marc\", \"Bill\", \"George\", \"Eliot\", \"Matt\", \"Trey\", \"Tracy\",\"Greg\", \"Steve\", \"Kristina\", \"Katie\", \"Jeff\"}';\n  n int;\n  lv_hstore_string varchar(80);\nBEGIN\n  for i in 0..1e6 loop\n     n:=trunc(random()*1000+1);\n     lv_hstore_string := 'id =&gt; '||i||', text =&gt; \"'||l_people_array[floor((random()*11))+1::int]||'\", number =&gt; '||n;\n     insert into DEMO_HSTORE values(lv_hstore_string::hstore);\n  end loop;\nEND$$;\n<\/pre>\n<p>Lets execute it:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# \\i 1mio_rows_no_pk_hstore.sql\nTiming is off.\npsql:1mio_rows_no_pk_hstore.sql:2: NOTICE:  extension \"hstore\" already exists, skipping\nCREATE EXTENSION\nDROP TABLE\nCREATE TABLE\nTiming is on.\nDO\nTime: 5833.749 ms\npostgres=# \\i 1mio_rows_no_pk_hstore.sql\nTiming is off.\npsql:1mio_rows_no_pk_hstore.sql:2: NOTICE:  extension \"hstore\" already exists, skipping\nCREATE EXTENSION\nDROP TABLE\nCREATE TABLE\nTiming is on.\nDO\nTime: 5741.429 ms\npostgres=# \\i 1mio_rows_no_pk_hstore.sql\nTiming is off.\npsql:1mio_rows_no_pk_hstore.sql:2: NOTICE:  extension \"hstore\" already exists, skipping\nCREATE EXTENSION\nDROP TABLE\nCREATE TABLE\nTiming is on.\nDO\nTime: 5789.512 ms\n<\/pre>\n<p>Around 6 seconds. Lets unload this with copy and reload it using copy:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# copy demo_hstore to '\/home\/postgres\/demo_hstore.txt';\nCOPY 1000001\nTime: 285.805 ms\n<\/pre>\n<p>Loading it with copy should be a lot faster:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">\\timing off\ndrop table demo_hstore;\ncreate table demo_hstore ( document hstore );\n\\timing on\ncopy DEMO_HSTORE from '\/home\/postgres\/demo_hstore.txt';\n<\/pre>\n<p>How much faster?<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# \\i 1mio_copy_no_indexes_hstore.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nCOPY 1000001\nTime: 2736.709 ms\npostgres=# \\i 1mio_copy_no_indexes_hstore.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nCOPY 1000001\nTime: 2882.477 ms\npostgres=# \\i 1mio_copy_no_indexes_hstore.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nCOPY 1000001\nTime: 3626.356 ms\n<\/pre>\n<p>More than 2 times faster. Your data now looks like this:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# select * from demo_hstore limit 5;\n                   document                   \n----------------------------------------------\n \"id\"=&gt;\"0\", \"text\"=&gt;\"Bill\", \"number\"=&gt;\"424\"\n \"id\"=&gt;\"1\", \"text\"=&gt;\"George\", \"number\"=&gt;\"681\"\n \"id\"=&gt;\"2\", \"text\"=&gt;\"Eliot\", \"number\"=&gt;\"79\"\n \"id\"=&gt;\"3\", \"text\"=&gt;\"George\", \"number\"=&gt;\"472\"\n \"id\"=&gt;\"4\", \"text\"=&gt;\"Greg\", \"number\"=&gt;\"966\"\n(5 rows)\n\nTime: 15.175 ms\n<\/pre>\n<h3>Using the jsonb datatype<\/h3>\n<p>PostgreSQL provides two data types for storing json. <a href=\"http:\/\/www.postgresql.org\/docs\/current\/static\/datatype-json.html\" target=\"_blank\">json and jsonb<\/a>. jsonb is the binary format data type introduced in 9.4 while json is based on text.<br \/>\nSo, lets do the same tests:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">\\timing off\ndrop table demo_jsonb;\ncreate table demo_jsonb ( document jsonb );\n\\timing on\nDO $$DECLARE\n  l_people_array varchar(15)[12] := '{\"Marc\", \"Bill\", \"George\", \"Eliot\", \"Matt\", \"Trey\", \"Tracy\",\"Greg\", \"Steve\", \"Kristina\", \"Katie\", \"Jeff\"}';\n  n int;\n  lv_json_string varchar(80);\nBEGIN\n  for i in 0..1e6 loop\n     n:=trunc(random()*1000+1);\n     lv_json_string := '{\"id\":\"'||i||'\", \"text\":\"'||l_people_array[floor((random()*11))+1::int]||'\", \"number\":\"'||n||'\"}';\n     insert into DEMO_JSONB values(lv_json_string::jsonb);\n  end loop;\nEND$$;\n<\/pre>\n<p>How long does it take in a loop? :<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# \\i 1mio_rows_no_pk_jsonb.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nDO\nTime: 6229.134 ms\npostgres=# \\i 1mio_rows_no_pk_jsonb.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nDO\nTime: 6210.610 ms\npostgres=# \\i 1mio_rows_no_pk_jsonb.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nDO\nTime: 6237.734 ms\n<\/pre>\n<p>Around 6 seconds. And by using copy?<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# copy demo_jsonb to '\/home\/postgres\/demo_jsonb.txt';\nCOPY 1000001\nTime: 501.950 ms\n<\/pre>\n<p>Lets load it:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# \\i 1mio_copy_no_indexes_jsonb.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nCOPY 1000001\nTime: 3739.681 ms\npostgres=# \\i 1mio_copy_no_indexes_jsonb.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nCOPY 1000001\nTime: 4369.161 ms\npostgres=# \\i 1mio_copy_no_indexes_jsonb.sql\nTiming is off.\nDROP TABLE\nCREATE TABLE\nTiming is on.\nCOPY 1000001\nTime: 5000.136 ms\n<\/pre>\n<p>Between 4 and 5 seconds. And how does the data look like?<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# select * from demo_jsonb limit 5;\n                   document                    \n-----------------------------------------------\n {\"id\": \"0\", \"text\": \"George\", \"number\": \"51\"}\n {\"id\": \"1\", \"text\": \"Marc\", \"number\": \"884\"}\n {\"id\": \"2\", \"text\": \"Bill\", \"number\": \"951\"}\n {\"id\": \"3\", \"text\": \"Steve\", \"number\": \"200\"}\n {\"id\": \"4\", \"text\": \"Eliot\", \"number\": \"722\"}\n(5 rows)\n<\/pre>\n<p>How do you select on this table if you want to limit the results?<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# SELECT document-&gt;'id', document-&gt;'text', document-&gt;'number' FROM demo_jsonb WHERE document @&gt; '{\"number\": \"884\"}' limit 5;\n ?column? | ?column? | ?column? \n----------+----------+----------\n \"1\"      | \"Marc\"   | \"884\"\n \"64\"     | \"Katie\"  | \"884\"\n \"201\"    | \"Tracy\"  | \"884\"\n \"1041\"   | \"George\" | \"884\"\n \"2074\"   | \"Greg\"   | \"884\"\n(5 rows)\n<\/pre>\n<p>Check the <a href=\"http:\/\/www.postgresql.org\/docs\/current\/static\/datatype-json.html\" target=\"_blank\">documentation<\/a> for more examples and on how to index jsonb columns.<br \/>\nLooking forward to see <a href=\"https:\/\/www.dbi-services.com\/index.php\/blog\/dbi-bloggers\/blogger\/listings\/fpa\" target=\"_blank\">Franck<\/a> and <a href=\"https:\/\/www.dbi-services.com\/index.php\/blog\/dbi-bloggers\/blogger\/listings\/dab\" target=\"_blank\">David<\/a> to load the same data &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The last post took a look at how to efficiently load 1m rows into a table in PostgreSQL. In this post I&#8217;ll take a look on how to do the same with semi structured data. Again it is the same system as in the last post using the same PostgreSQL parameters. Using the hstore datatype&hellip;&nbsp;<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[83],"tags":[],"class_list":["post-5145","post","type-post","status-publish","format-standard","hentry","category-postgresql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>bulk loading semi structured data in postgresql - dbi services | Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"bulk loading semi structured data in postgresql\" \/>\n<meta property=\"og:description\" content=\"The last post took a look at how to efficiently load 1m rows into a table in PostgreSQL. In this post I&#8217;ll take a look on how to do the same with semi structured data. Again it is the same system as in the last post using the same PostgreSQL parameters. Using the hstore datatype&hellip;&nbsp;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi services | Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dbiservices\/\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-10T10:33:57+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif\" \/>\n<meta name=\"author\" content=\"Open source Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:site\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Open source Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/\"},\"author\":{\"name\":\"Open source Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\"},\"headline\":\"bulk loading semi structured data in postgresql\",\"datePublished\":\"2015-05-10T10:33:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/\"},\"wordCount\":235,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/wwwold.dbi-services.com\\\/plugins\\\/editors\\\/jce\\\/tiny_mce\\\/plugins\\\/article\\\/img\\\/trans.gif\",\"articleSection\":[\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/\",\"name\":\"bulk loading semi structured data in postgresql - dbi services | Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/wwwold.dbi-services.com\\\/plugins\\\/editors\\\/jce\\\/tiny_mce\\\/plugins\\\/article\\\/img\\\/trans.gif\",\"datePublished\":\"2015-05-10T10:33:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/#primaryimage\",\"url\":\"http:\\\/\\\/wwwold.dbi-services.com\\\/plugins\\\/editors\\\/jce\\\/tiny_mce\\\/plugins\\\/article\\\/img\\\/trans.gif\",\"contentUrl\":\"http:\\\/\\\/wwwold.dbi-services.com\\\/plugins\\\/editors\\\/jce\\\/tiny_mce\\\/plugins\\\/article\\\/img\\\/trans.gif\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/bulk-loading-semi-structured-data-in-postgresql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"bulk loading semi structured data in postgresql\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi services Blog\",\"description\":\"#BeSharing\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"alternateName\":\"dbi Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\",\"name\":\"dbi services\",\"alternateName\":\"dbi\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"width\":512,\"height\":512,\"caption\":\"dbi services\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/dbiservices\\\/\",\"https:\\\/\\\/x.com\\\/dbiservices\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dbi-services\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/dbiservices\"],\"description\":\"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.\",\"email\":\"info@dbi-services.com\",\"telephone\":\"+41 32 422 96 00\",\"legalName\":\"dbi services SA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\",\"name\":\"Open source Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"caption\":\"Open source Team\"},\"description\":\"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/open-source-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"bulk loading semi structured data in postgresql - dbi services | Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/","og_locale":"en_US","og_type":"article","og_title":"bulk loading semi structured data in postgresql","og_description":"The last post took a look at how to efficiently load 1m rows into a table in PostgreSQL. In this post I&#8217;ll take a look on how to do the same with semi structured data. Again it is the same system as in the last post using the same PostgreSQL parameters. Using the hstore datatype&hellip;&nbsp;","og_url":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/","og_site_name":"dbi services | Blog","article_publisher":"https:\/\/www.facebook.com\/dbiservices\/","article_published_time":"2015-05-10T10:33:57+00:00","og_image":[{"url":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif","type":"","width":"","height":""}],"author":"Open source Team","twitter_card":"summary_large_image","twitter_creator":"@dbiservices","twitter_site":"@dbiservices","twitter_misc":{"Written by":"Open source Team","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/"},"author":{"name":"Open source Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a"},"headline":"bulk loading semi structured data in postgresql","datePublished":"2015-05-10T10:33:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/"},"wordCount":235,"commentCount":0,"publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/#primaryimage"},"thumbnailUrl":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif","articleSection":["PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/","url":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/","name":"bulk loading semi structured data in postgresql - dbi services | Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/#primaryimage"},"thumbnailUrl":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif","datePublished":"2015-05-10T10:33:57+00:00","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/#primaryimage","url":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif","contentUrl":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/bulk-loading-semi-structured-data-in-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"bulk loading semi structured data in postgresql"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi services Blog","description":"#BeSharing","publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"alternateName":"dbi Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dbi-services.com\/blog\/#organization","name":"dbi services","alternateName":"dbi","url":"https:\/\/www.dbi-services.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","width":512,"height":512,"caption":"dbi services"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/dbiservices\/","https:\/\/x.com\/dbiservices","https:\/\/www.linkedin.com\/company\/dbi-services\/","https:\/\/www.youtube.com\/user\/dbiservices"],"description":"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.","email":"info@dbi-services.com","telephone":"+41 32 422 96 00","legalName":"dbi services SA"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a","name":"Open source Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","caption":"Open source Team"},"description":"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.","url":"https:\/\/www.dbi-services.com\/blog\/author\/open-source-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/5145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=5145"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/5145\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=5145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=5145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=5145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}