Skip to content
Read For Learn
Read For Learn
  • Database
    • Oracle
    • SQL
  • C
  • C++
  • Java
  • Java Script
  • jQuery
  • PHP
Read For Learn
  • Database
    • Oracle
    • SQL
  • C
  • C++
  • Java
  • Java Script
  • jQuery
  • PHP

INSERT ON DUPLICATE KEY UPDATE failes in postmeta table

By doing a SHOW CREATE TABLE on wp_postmeta, I got the structure of that table which included this:

 PRIMARY KEY (`meta_id`),

So the key that MySQL can do the ‘insert or update’ on is the meta_id, which you’re not providing. Therefore in your query, it will always be added as a new row.

EDIT: The docs for INSERT ON DUPLICATE UPDATE say that it looks at either the PRIMARY KEY or any UNIQUE index, so you could possibly get around this by creating a new UNIQUE index on the combination of post_id and meta_key which might solve your problem.

WARNINGS

  • If this is a big table for you that could be a bad idea because it might slow down some read or write operations.
  • WordPress or some plugin might be relying on the ability to have duplicate rows wiht the same post_id and meta_key, and this would prevent those being inserted. It seems like it would be a bad idea for code to do this, but it’s perfectly possible.

Solution:

Tested this and it works for me:

ALTER TABLE wp_postmeta ADD UNIQUE `post_metakey_index` (post_id, meta_key(100));`

With this index, if I run the query from your question twice, it first inserts it, then updates it.

Related Posts:

  1. Identifying Importer Posts
  2. Mass importing json data into custom fields (postmeta)
  3. Iterating through $wpdb query without using get_results for large query results
  4. Query posts WITHOUT a custom meta field
  5. SQL query – get a featured image’s alt / alternative text
  6. Sorting my posts on homepage my specific value in post_meta table
  7. When importing posts to a new site if XML file has postmeta not setup on new server what happens?
  8. How do I retrieve the slug of the current page?
  9. Most efficient way to get posts with postmeta
  10. Get posts by meta value
  11. Explanation of update_post_(meta/term)_cache
  12. How to extract data from a post meta serialized array?
  13. order by numeric value for meta value
  14. How to save an array with one metakey in postmeta?
  15. WordPress is stripping escape backslashes from JSON strings in post_meta
  16. How can I get the post ID from a WP_Query loop?
  17. Check if Post Title exists, Insert post if doesn’t, Add Incremental # to Meta if does
  18. How to update_post_meta value as array
  19. Adding meta tag without plugin
  20. What’s the point of get_post_meta’s $single param?
  21. What is the different between an attachment in wp_posts and an attachment in wp_postmeta?
  22. How to edit a post meta data in a Gutenberg Block?
  23. Importing data for advanced custom fields plugin?
  24. Sanitizing integer input for update_post_meta
  25. post formats – how to switch meta boxes when changing format?
  26. Execute action after post is saved with all related post_meta records (data)
  27. Lack of composite indexes for meta tables
  28. Get a single post by a unique meta value
  29. InDesign to WordPress workflow
  30. if get_post_meta is empty do something
  31. How we get_post_meta without post id
  32. How get post id from meta value
  33. What is the code to get the download link for a product in WooCommerce?
  34. Safe to delete blank postmeta?
  35. advanced custom fields update_field for field type: Taxonomy
  36. Wondering how to turn your firefox bookmarks into a WordPress blog?
  37. What is the most efficient way of querying posts based on visits and date for current day?
  38. update_post_meta not saving when value is zero
  39. Content hooks vs User hooks
  40. Meta compare with date (stored as string) not working
  41. Trying to get custom post meta through Jetpack JSON API [closed]
  42. What’s the database relationship between a post and its attachments
  43. Search custom post type by meta data
  44. How to update/insert custom field(post meta) data with wordpress REST API?
  45. Export WP database for import using WP-CLI on Vagrant Box
  46. Restrict post edit/delete based on user ID and custom field
  47. Custom Queries: Joining On Meta Values From Two Custom Post Types
  48. get_post_meta returning empty string when data shows in the database
  49. publish_post action hook doesn’t give post_meta_data
  50. Query Custom Meta Value with Increment
  51. Remove WordPress.org Meta link
  52. Remove post meta keys
  53. Is there a way to import terms into WordPress?
  54. How to access the post meta of a post that has just been published?
  55. Why time functions show invalid time zone when using ‘c’ time format?
  56. Why is get_post_meta returning an array when I specify it as single?
  57. How to update/delete array in post meta value?
  58. How to get all term meta for a taxonomy – getting term_meta for taxonomy
  59. Adding an assisting editor box to Post page
  60. What server settings are required to import WordPress XML file
  61. WPDB Multiple site’s posts and get featured images
  62. delete unused postmeta
  63. importing data from non-wordpress mysql db
  64. Should I sanitize custom post meta if it is going to be escaped later?
  65. Add post meta based on another post meta value before publish post
  66. WXR import problem — not including categories
  67. How do I retrieve multi-dimensional arrays from the wp_postmeta table, & display on a website?
  68. Front-end update_post_meta snippet displays white screen?
  69. Query between two meta values?
  70. Save both current and new version of post meta
  71. Get Advanced Custom Fields values before saving [closed]
  72. Give extra post-meta to RSS feeds
  73. How to get meta value in wp_attachment_metadata
  74. WP REST API “rest_no_route” when trying to update meta
  75. Clean up output added via wp_head()
  76. List posts under meta_value heading
  77. Why am I getting an infinite loop with have_posts?
  78. get_post_meta – get a single value
  79. delete value 0 in post meta [closed]
  80. Can I safely delete a record, manually, in the wp postmeta table?
  81. How to store post meta in an array?
  82. What action hook updates post meta?
  83. Can’t translate the post meta data (Date) in another language
  84. get_post_meta / update_post_meta array
  85. adding a URL to a post meta
  86. Exclude a category from the filed under list
  87. Insert post without actions/hooks
  88. Short of raw SQL, can I query for multiple attachment metadata that have a given array key?
  89. How to display liked posts of current user in wordpress?
  90. How do I access post meta data when publishing a new post in Gutenberg?
  91. update_post_meta() not working when used with WordPress action
  92. Filter query posts by the count of metas for a meta key
  93. Convert a static website to a WordPress theme and import all existing content
  94. Using Advanced Custom Field (ACF) to insert meta description on each page
  95. Triple meta_key on custom SELECT query
  96. get_post_custom()
  97. Adding meta data to an attachment post
  98. update_post_meta not adding anything.(Nor add_post_meta)
  99. loop through all meta keys with get_post_meta
  100. Get posts by meta value with date
Categories post-meta Tags bulk-import, import, post-meta, query
How to remove query string from current page URL?
Can an image have more than one parent_post?

Recommended Hostings

Cloudways: Realize Your Website's Potential With Flexible & Affordable Hosting. 24/7/365 Support, Managed Security, Automated Backups, and 24/7 Real-time Monitoring.

FastComet: Fast SSD Hosting, Free Migration, Hack-Free Security, 24/7 Super Fast Support, 45 Day Money Back Guarantee.

Recent Added Topics

  • Bug in translation system: load_theme_textdomain() returns true, files are available and accessible but the language defaults to english
  • Custom Elementor controls not appearing in the widget Advanced tab using injection hooks
  • Get the name of the template/*html file used
  • Trying to Add Paging to Single Post Page
  • Sharing media files between live and staging servers
  • How to display the description of a custom post type in the dashboard?
  • Critical error on image display
  • Copying WP data and files into new install?
  • How to determine the DirectAdmin WordPress backup date?
  • How to get list of ALL tables in the database?
© 2026 Read For Learn
  • Database
    • Oracle
    • SQL
  • algorithm
  • asp.net
  • assembly
  • binary
  • c#
  • Git
  • hex
  • HTML
  • iOS
  • language angnostic
  • math
  • matlab
  • Tips & Trick
  • Tools
  • windows
  • C
  • C++
  • Java
  • javascript
  • Python
  • R
  • Java Script
  • jQuery
  • PHP
  • WordPress