{"id":3627,"date":"2026-09-14T13:36:10","date_gmt":"2026-09-14T13:36:10","guid":{"rendered":"https:\/\/kedar.nitty-witty.com\/blog\/?p=3627"},"modified":"2026-09-14T13:36:10","modified_gmt":"2026-09-14T13:36:10","slug":"mysql-instant-ddl-breaks-exchange-partition","status":"publish","type":"post","link":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition","title":{"rendered":"MySQL INSTANT DDL breaks EXCHANGE PARTITION"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A MySQL partition maintenance script starts failing at the <code>EXCHANGE PARTITION<\/code> step after a recent <code>ALTER TABLE<\/code> operation, with the following error:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ERROR 1731 (HY000): Non matching attribute 'INSTANT COLUMN(s)' between partition and table<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This MySQL ERROR 1731 is caused by an earlier <code>ALTER TABLE<\/code> run with <code>ALGORITHM=INSTANT<\/code>. A friend hit this on a job and this issue. I confirmed the same behaviour on MySQL 8.4.11 and as I learnt more about it. This was new for me, what I learnt through this was interesting and I had to blog this.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Producing MySQL ERROR 1731<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The suspecting nature made me not believe what I just heard and hence I decided to spin-up my test MySQL 8.4.11 instance and see what&#8217;s going on.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql&gt; CREATE TABLE `api_request_log` (\n    -&gt;   `id`             bigint unsigned NOT NULL AUTO_INCREMENT,\n    -&gt;   `tenant_id`      int unsigned    NOT NULL,\n    -&gt;   `endpoint`       varchar(191)    NOT NULL,\n    -&gt;   `http_method`    varchar(10)     NOT NULL,\n    -&gt;   `status_code`    smallint unsigned NOT NULL,\n    -&gt;   `response_ms`    int unsigned    NOT NULL,\n    -&gt;   `client_ip`      varchar(45)     NOT NULL,\n    -&gt;   `user_agent`     varchar(255)    DEFAULT NULL,\n    -&gt;   `request_bytes`  int unsigned    NOT NULL DEFAULT '0',\n    -&gt;   `response_bytes` int unsigned    NOT NULL DEFAULT '0',\n    -&gt;   `trace_id`       char(32)        NOT NULL,\n    -&gt;   `logged_at`      datetime        NOT NULL DEFAULT CURRENT_TIMESTAMP,\n    -&gt;   PRIMARY KEY (`id`,`logged_at`),\n    -&gt;   KEY `idx_tenant_logged`   (`tenant_id`,`logged_at`),\n    -&gt;   KEY `idx_endpoint_status` (`endpoint`,`status_code`,`logged_at`),\n    -&gt;   KEY `idx_trace`           (`trace_id`)\n    -&gt; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci\n    -&gt; PARTITION BY RANGE COLUMNS(`logged_at`)\n    -&gt; (PARTITION p202606 VALUES LESS THAN ('2026-07-01') ENGINE = InnoDB,\n    -&gt;  PARTITION p202607 VALUES LESS THAN ('2026-08-01') ENGINE = InnoDB,\n    -&gt;  PARTITION p202608 VALUES LESS THAN ('2026-09-01') ENGINE = InnoDB,\n    -&gt;  PARTITION p202609 VALUES LESS THAN ('2026-10-01') ENGINE = InnoDB);\nQuery OK, 0 rows affected (0.71 sec)\n\nmysql&gt; ALTER TABLE api_request_log ADD COLUMN error_code varchar(32) DEFAULT NULL, ALGORITHM=INSTANT;\nQuery OK, 0 rows affected (0.28 sec)\nRecords: 0  Duplicates: 0  Warnings: 0\n\nmysql&gt; CREATE TABLE api_request_log_p202607 LIKE api_request_log;\nQuery OK, 0 rows affected (1.28 sec)\n\nmysql&gt; ALTER TABLE api_request_log_p202607 REMOVE PARTITIONING;\nQuery OK, 0 rows affected (0.87 sec)\nRecords: 0  Duplicates: 0  Warnings: 0\n\nmysql&gt; ALTER TABLE api_request_log EXCHANGE PARTITION p202607 \nWITH TABLE api_request_log_p202607 WITHOUT VALIDATION;\n<strong>ERROR 1731 (HY000): Non matching attribute 'INSTANT COLUMN(s)' between partition and table<\/strong><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">What is MySQL ERROR 1731, &#8220;Non matching attribute &#8216;INSTANT COLUMN(s)'&#8221;?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Error 1731 is <code>ER_PARTITION_EXCHANGE_DIFFERENT_OPTION<\/code>. MySQL raises it when <code>ALTER TABLE ... EXCHANGE PARTITION<\/code> finds that the partition and the standalone table do not have identical structure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That said, if you perform SHOW CREATE TABLE for both api_request_log and api_request_log_p202607, the table definition will appear identical. The real issue or difference lies in InnoDB&#8217;s internal data dictionary.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Let&#8217;s meet the MySQL&#8217;s (not a) bug<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">It is not a bug because I reject it. Ahem! Well, so this &#8220;issue&#8221; is already filed in MySQL bug repository as: <a href=\"https:\/\/bugs.mysql.com\/bug.php?id=104970\" target=\"_blank\" rel=\"noopener nofollow\">MySQL Bug #104970 \u2013 EXCHANGE PARTITION fails for table altered with ALGORITHM=INSTANT<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The verification team&#8217;s comment conveys that EXCHANGE has design premises that INSTANT columns violate, and fixing it &#8220;<em>would require a whole new redesign and reprogramming of the feature.<\/em>&#8220;. What I understand from that report is that we&#8217;re not going to see EXCHANGE PARTITION for INSTANT columns. Only learning here is don&#8217;t add INSTANT columns to a partitioned table.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Identifying INSTANT columns in MySQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Just by looking at CREATE TABLE statements we cannot deduce if the column is INSTANT addition. Luckily, we can query the information_schema tables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>HAS_DEFAULT<\/code> column in <code>information_schema.INNODB_COLUMNS<\/code> indicates whether a column added using <code>ALTER TABLE ... ADD COLUMN ... ALGORITHM=INSTANT<\/code> has a default value. Since columns added instantly always have a default value, <code>HAS_DEFAULT<\/code> can be used as an indicator of whether a column was added using the <code>INSTANT<\/code> algorithm.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I use following query to identify such tables with partitioning having INSTANT columns present.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT DISTINCT\n  SUBSTRING_INDEX(t.NAME, '\/', 1) AS table_schema,\n  SUBSTRING_INDEX(SUBSTRING_INDEX(t.NAME, '\/', -1), '#p#', 1) AS table_name,\n  IF(p.TABLE_NAME IS NULL, 'NO', 'YES') AS has_partitioning,\n  c.NAME AS column_name, c.POS, c.HAS_DEFAULT\nFROM information_schema.INNODB_COLUMNS c\nJOIN information_schema.INNODB_TABLES  t ON c.TABLE_ID = t.TABLE_ID\nLEFT JOIN (\n    SELECT DISTINCT TABLE_SCHEMA, TABLE_NAME\n    FROM information_schema.PARTITIONS\n    WHERE PARTITION_NAME IS NOT NULL\n) p ON p.TABLE_SCHEMA = SUBSTRING_INDEX(t.NAME, '\/', 1)\n   AND p.TABLE_NAME   = SUBSTRING_INDEX(SUBSTRING_INDEX(t.NAME, '\/', -1), '#p#', 1)\nWHERE c.HAS_DEFAULT = 1\nORDER BY table_schema, table_name, c.POS;\n+--------------+------------------------+------------------+--------------+-----+-------------+\n| table_schema | table_name             | has_partitioning | column_name  | POS | HAS_DEFAULT |\n+--------------+------------------------+------------------+--------------+-----+-------------+\n| test         | api_request_log        | YES              | error_code   |  12 |           1 |\n+--------------+------------------------+------------------+--------------+-----+-------------+<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to fix MySQL Error 1731<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The simple fixture here is to rebuild the table and cleanup the metadata mess created by ALGORITHM=INSTANT. After rebuild, the EXCHANGE PARTITION works flawlessly. OPTIMIZE table will do the same thing.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql&gt; ALTER TABLE api_request_log ENGINE=InnoDB;\nQuery OK, 0 rows affected (0.99 sec)\nRecords: 0  Duplicates: 0  Warnings: 0\n\nmysql&gt; ALTER TABLE api_request_log EXCHANGE PARTITION p202607   WITH TABLE api_request_log_p202607 WITHOUT VALIDATION;\nQuery OK, 0 rows affected (0.04 sec)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It is worth calling this out because it is easy to assume that WITHOUT VALIDATION will bypass the problem. It won&#8217;t. WITHOUT VALIDATION is about validating whether the rows in the table being exchanged satisfy the partitioning expression. It does not disable the structural and metadata compatibility checks required for the exchange.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\" style=\"font-style:normal;font-weight:300\">When WITHOUT VALIDATION is specified, the ALTER TABLE &#8230; EXCHANGE PARTITION operation does not perform any row-by-row validation when exchanging a partition a nonpartitioned table, allowing database administrators to assume responsibility for ensuring that rows are within the boundaries of the partition definition.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Okay, now NULL ALTER or TABLE REBUILD is good for smaller tables but what about the large ones? That&#8217;s why we used INSTANT right (and repenting now?). Well, Percona Toolkit to the rescue. Use pt-online-schema-change. This is a go-to utility for  every open source DBA for any big table ops. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where is the problem?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Design. Or that&#8217;s what I understand. As you read earlier the bug report already says this is not going to be implemented. I read the <a href=\"https:\/\/dev.mysql.com\/worklog\/task\/?id=11250\" target=\"_blank\" rel=\"noopener nofollow\">Work Log for Support Instant Add Column<\/a> task and it clearly state this<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\" style=\"font-style:normal;font-weight:300\">FR14: For <strong>EXCHANGE PARTITION<\/strong>, to simplify the logic, if either the partition or the table to be swapped is <strong>instant<\/strong>, then <strong>the operation would be rejected<\/strong> with error <strong>ER_PARTITION_EXCHANGE_DIFFERENT_OPTION<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">This is also something you can read through the <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/9.7\/en\/alter-table.html\" target=\"_blank\" rel=\"noopener nofollow\">MySQL documentation<\/a> that clearly states this limitation with ALGORITHM=INSTANT and partitioning operations:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\" style=\"font-style:normal;font-weight:300\">After adding a column to a partitioned table using ALGORITHM=INSTANT, it is no longer possible to perform ALTER TABLE &#8230; EXCHANGE PARTITION on the table.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Why EXCHANGE PARTITION fails for INSTANT column<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s do a shallow dive into the MySQL codebase.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I was looking to see why it is a problem to fix this issue or accept this as a feature by exploring the MySQL git repository. This is what I&#8217;ve understood from the expedition.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>INSTANT COLUMN(s)<\/code> check is actually handled at the storage-engine level in <code>storage\/innobase\/handler\/handler0alter.cc<\/code>, in the <code><a href=\"https:\/\/github.com\/mysql\/mysql-server\/blob\/fcf22d38b9097f2edaf450c76957218c5f4af509\/storage\/innobase\/handler\/handler0alter.cc#L11036\" target=\"_blank\" rel=\"noopener nofollow\">exchange_partition_low<\/a>()<\/code> function &#8211; relevant code section is below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int ha_innopart::exchange_partition_low(uint part_id, dd::Table *part_table,dd::Table *swap_table) {\n...\n  if (dd_table_has_instant_cols(*part_table) ||\n      dd_table_has_instant_cols(*swap_table)) {\n    my_error(ER_PARTITION_EXCHANGE_DIFFERENT_OPTION, MYF(0),\n             \"INSTANT COLUMN(s)\");\n    return true;\n  }\n...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Notice the <code>||<\/code> in the condition. MySQL does not compare the instant-column metadata of the two tables. It simply checks whether <strong>either side<\/strong> has instant-column metadata. If either does, the EXCHANGE operation is rejected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But how does MySQL decide if a table has instant columns? That&#8217;s handled by <code><a href=\"https:\/\/github.com\/mysql\/mysql-server\/blob\/fcf22d38b9097f2edaf450c76957218c5f4af509\/storage\/innobase\/include\/dict0dd.h#L568\" target=\"_blank\" rel=\"noopener nofollow\">dd_table_has_instant_cols<\/a>()<\/code>, defined in <code>storage\/innobase\/include\/dict0dd.h<\/code>. Relevant code blow is as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>inline bool dd_table_has_instant_cols(const dd::Table &amp;table) {\n  if (table.is_temporary()) {\n    return false;\n  }\n\n  bool instant_v1 = dd_table_is_upgraded_instant(table);\n  bool instant_v2 = dd_table_has_row_versions(table);\n\n  bool instant = instant_v1 || instant_v2;\n\n  \/* If table has instant columns, make sure they are consistent with DD *\/\n  ut_ad(!instant || dd_instant_columns_consistent(table));\n\n  return (instant);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So, either <code>dd_table_is_upgraded_instant()<\/code> or <code>dd_table_has_row_versions()<\/code> returning <code>true<\/code> is enough for <code>dd_table_has_instant_cols()<\/code> to return <code>true<\/code> (have INSTANT column).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But how does the functions find that the table has instant columns? It seems like this is something coming from MySQL&#8217;s data dictionary meta data. What I understood is, we execute an <code>ALTER TABLE<\/code> with <code>ALGORITHM=INSTANT<\/code>, InnoDB updates the MySQL Data Dictionary (DD) metadata. At a high level, this is something like<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ALTER TABLE\n      |\n      v\nInnoDB ALTER implementation\n      |\n      v\nUpdate dd::Table \/ dd::Column\n      |\n      +--&gt; table.se_private_data()\n      |       |\n      |       +--&gt; instant_col       &#91;V1]\n      |\n      +--&gt; column.se_private_data()\n              |\n              +--&gt; version_added\n              +--&gt; physical_pos &#91;V2]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This metadata is part of the server&#8217;s <code>dd::Table<\/code> \/ <code>dd::Column<\/code> objects. That&#8217;s what the functions above inspect when the <code>dd::Table<\/code> is passed as the <code>table<\/code> argument. You might have noted V1 and V2 here. An easy explanation to that is:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">V1 = older table-level instant metadata.<br>V2 = newer row-version\/column-level metadata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So full picture of our ALTER TABLE &#8230; EXCHANGE PARTITION failure is as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ALTER TABLE ... ALGORITHM=INSTANT\n                 |\n                 v\n        InnoDB updates DD\n                 |\n        +--------+---------+\n        |                  |\n        v                  v\n   dd::Table           dd::Column\n        |                  |\n se_private_data()   se_private_data()\n        |                  |\n   \"instant_col\"      \"physical_pos\"\n        |                  |\n        +--------+---------+\n                 |\n                 v\n        Persistent MySQL DD\n                 |\n                 v\n        EXCHANGE PARTITION Command executed\n                 |\n                 v\n    dd_table_has_instant_cols()\n                 |\n                 +--&gt; V1: instant_col exists?\n                 |\n                 +--&gt; V2: physical_pos exists?\n                 |\n                 v\n              TRUE\n                 |\n                 v\n       EXCHANGE rejected<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\" style=\"font-style:italic;font-weight:300\">\n<p class=\"wp-block-paragraph\">I have tried to keep this simple for my own understandings and I hope it make sense for most part. If you see any error, do not hesitate to correct me. Long ago I said &#8220;<strong>To err is human, To restore is DBA<\/strong>&#8221; but I think it is time to extend that with &#8220;<strong>To error is AI, To acknowledge it confidently, hallucinate again, for more tokens &#8211; is still AI<\/strong>.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><em>I wish MySQL can fix this, <strong>like others did<\/strong>.<\/em> I&#8217;m going to try asking my AI friend to compare the code bases and see what I can understand, when time permits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR and Your Action<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do not run ALTER TABLE with INSTANT algorithm on a partitioned table. EXCHANGE PARTITION will refuse the operation with that metadata. The only fix there is to perform a table rebuild.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Run the query<\/strong> to identify Partitioned table having INSTANT columns. At-least you will know in advance.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT DISTINCT\n  SUBSTRING_INDEX(t.NAME, '\/', 1) AS table_schema,\n  SUBSTRING_INDEX(SUBSTRING_INDEX(t.NAME, '\/', -1), '#p#', 1) AS table_name,\n  IF(p.TABLE_NAME IS NULL, 'NO', 'YES') AS has_partitioning,\n  c.NAME AS column_name, c.POS, c.HAS_DEFAULT\nFROM information_schema.INNODB_COLUMNS c\nJOIN information_schema.INNODB_TABLES  t ON c.TABLE_ID = t.TABLE_ID\nLEFT JOIN (\n    SELECT DISTINCT TABLE_SCHEMA, TABLE_NAME\n    FROM information_schema.PARTITIONS\n    WHERE PARTITION_NAME IS NOT NULL\n) p ON p.TABLE_SCHEMA = SUBSTRING_INDEX(t.NAME, '\/', 1)\n   AND p.TABLE_NAME   = SUBSTRING_INDEX(SUBSTRING_INDEX(t.NAME, '\/', -1), '#p#', 1)\nWHERE c.HAS_DEFAULT = 1\nORDER BY table_schema, table_name, c.POS;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ALGORITHM=INSTANT<\/code> is a great feature, especially when dealing with large tables where a traditional table rebuild is something we really want to avoid.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But this experience shows that an <code>INSTANT ADD COLUMN<\/code> has consequences for partitioned tables. If you are using <code><strong>EXCHANGE PARTITION<\/strong><\/code>, adding a column with <code>ALGORITHM=INSTANT<\/code> can break that workflow later.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">INSTANT DDL can save you a table rebuild today but prevent an <code>EXCHANGE PARTITION<\/code> tomorrow.<\/p>\n","protected":false},"excerpt":{"rendered":"MySQL ERROR 1731 &#8216;Non matching attribute INSTANT COLUMN(s)&#8217; breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.\n","protected":false},"author":1,"featured_media":3632,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[8,377],"tags":[1245,1246,1242,427,1243,1244],"class_list":["post-3627","post","type-post","status-publish","format-standard","has-post-thumbnail","category-mysql","category-mysql-articles","tag-algorithminstant","tag-er_partition_exchange_different_option","tag-exchange-partition","tag-mysql","tag-mysql-error-1731","tag-non-matching-attribute-instant-column"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"MySQL ERROR 1731 &#039;Non matching attribute INSTANT COLUMN(s)&#039; breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Kedar\"\/>\n\t<meta name=\"google-site-verification\" content=\"_Bu1h5r0PxIC0D2jBVdmYN45RTeG9ogcX85XLkbG1qA\" \/>\n\t<meta name=\"msvalidate.01\" content=\"116B62074CBCA1BA99B8CCE09CCF2FB8\" \/>\n\t<meta name=\"keywords\" content=\"algorithm=instant,er_partition_exchange_different_option,exchange partition,mysql,mysql error 1731,non matching attribute instant column\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Change Is Inevitable | Kedar Vaijanapurkar&#039;s Blog for MySQL, technology and various subjects\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable\" \/>\n\t\t<meta property=\"og:description\" content=\"MySQL ERROR 1731 &#039;Non matching attribute INSTANT COLUMN(s)&#039; breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-14T13:36:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-14T13:36:10+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable\" \/>\n\t\t<meta name=\"twitter:description\" content=\"MySQL ERROR 1731 &#039;Non matching attribute INSTANT COLUMN(s)&#039; breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#article\",\"name\":\"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable\",\"headline\":\"MySQL INSTANT DDL breaks EXCHANGE PARTITION\",\"author\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/instant-algo-exchg-partition.avif\",\"width\":1536,\"height\":1024,\"caption\":\"ALGORITHM=INSTANT Exchange Partition\"},\"datePublished\":\"2026-09-14T13:36:10+00:00\",\"dateModified\":\"2026-09-14T13:36:10+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#webpage\"},\"articleSection\":\"MySQL, MySQL-Articles, ALGORITHM=INSTANT, ER_PARTITION_EXCHANGE_DIFFERENT_OPTION, exchange partition, MySQL, MySQL ERROR 1731, Non matching attribute INSTANT COLUMN\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql#listItem\",\"name\":\"MySQL\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql#listItem\",\"position\":2,\"name\":\"MySQL\",\"item\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\\\/mysql-articles#listItem\",\"name\":\"MySQL-Articles\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\\\/mysql-articles#listItem\",\"position\":3,\"name\":\"MySQL-Articles\",\"item\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\\\/mysql-articles\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#listItem\",\"name\":\"MySQL INSTANT DDL breaks EXCHANGE PARTITION\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql#listItem\",\"name\":\"MySQL\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#listItem\",\"position\":4,\"name\":\"MySQL INSTANT DDL breaks EXCHANGE PARTITION\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\\\/mysql-articles#listItem\",\"name\":\"MySQL-Articles\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#person\",\"name\":\"Kedar\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/be1f7021485c325d92cc4c5d961accb9c1af72b1b11281a790f7f4f066ef10d3?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Kedar\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin#author\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin\",\"name\":\"Kedar\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/be1f7021485c325d92cc4c5d961accb9c1af72b1b11281a790f7f4f066ef10d3?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Kedar\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#webpage\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition\",\"name\":\"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable\",\"description\":\"MySQL ERROR 1731 'Non matching attribute INSTANT COLUMN(s)' breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/instant-algo-exchg-partition.avif\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition\\\/#mainImage\",\"width\":1536,\"height\":1024,\"caption\":\"ALGORITHM=INSTANT Exchange Partition\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/mysql-instant-ddl-breaks-exchange-partition#mainImage\"},\"datePublished\":\"2026-09-14T13:36:10+00:00\",\"dateModified\":\"2026-09-14T13:36:10+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/\",\"name\":\"..::CHANGE is INEVITABLE::..\",\"description\":\"Kedar Vaijanapurkar's Blog for MySQL, technology and various subjects\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable","description":"MySQL ERROR 1731 'Non matching attribute INSTANT COLUMN(s)' breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.","canonical_url":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition","robots":"max-image-preview:large","keywords":"algorithm=instant,er_partition_exchange_different_option,exchange partition,mysql,mysql error 1731,non matching attribute instant column","webmasterTools":{"google-site-verification":"_Bu1h5r0PxIC0D2jBVdmYN45RTeG9ogcX85XLkbG1qA","msvalidate.01":"116B62074CBCA1BA99B8CCE09CCF2FB8","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#article","name":"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable","headline":"MySQL INSTANT DDL breaks EXCHANGE PARTITION","author":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin#author"},"publisher":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/kedar.nitty-witty.com\/blog\/wp-content\/uploads\/2026\/09\/instant-algo-exchg-partition.avif","width":1536,"height":1024,"caption":"ALGORITHM=INSTANT Exchange Partition"},"datePublished":"2026-09-14T13:36:10+00:00","dateModified":"2026-09-14T13:36:10+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#webpage"},"isPartOf":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#webpage"},"articleSection":"MySQL, MySQL-Articles, ALGORITHM=INSTANT, ER_PARTITION_EXCHANGE_DIFFERENT_OPTION, exchange partition, MySQL, MySQL ERROR 1731, Non matching attribute INSTANT COLUMN"},{"@type":"BreadcrumbList","@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/kedar.nitty-witty.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql#listItem","name":"MySQL"}},{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql#listItem","position":2,"name":"MySQL","item":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql","nextItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-articles#listItem","name":"MySQL-Articles"},"previousItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-articles#listItem","position":3,"name":"MySQL-Articles","item":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-articles","nextItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#listItem","name":"MySQL INSTANT DDL breaks EXCHANGE PARTITION"},"previousItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql#listItem","name":"MySQL"}},{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#listItem","position":4,"name":"MySQL INSTANT DDL breaks EXCHANGE PARTITION","previousItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-articles#listItem","name":"MySQL-Articles"}}]},{"@type":"Person","@id":"https:\/\/kedar.nitty-witty.com\/blog\/#person","name":"Kedar","image":{"@type":"ImageObject","@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/be1f7021485c325d92cc4c5d961accb9c1af72b1b11281a790f7f4f066ef10d3?s=96&d=mm&r=g","width":96,"height":96,"caption":"Kedar"}},{"@type":"Person","@id":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin#author","url":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin","name":"Kedar","image":{"@type":"ImageObject","@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/be1f7021485c325d92cc4c5d961accb9c1af72b1b11281a790f7f4f066ef10d3?s=96&d=mm&r=g","width":96,"height":96,"caption":"Kedar"}},{"@type":"WebPage","@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#webpage","url":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition","name":"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable","description":"MySQL ERROR 1731 'Non matching attribute INSTANT COLUMN(s)' breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#breadcrumblist"},"author":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin#author"},"creator":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin#author"},"image":{"@type":"ImageObject","url":"https:\/\/kedar.nitty-witty.com\/blog\/wp-content\/uploads\/2026\/09\/instant-algo-exchg-partition.avif","@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition\/#mainImage","width":1536,"height":1024,"caption":"ALGORITHM=INSTANT Exchange Partition"},"primaryImageOfPage":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition#mainImage"},"datePublished":"2026-09-14T13:36:10+00:00","dateModified":"2026-09-14T13:36:10+00:00"},{"@type":"WebSite","@id":"https:\/\/kedar.nitty-witty.com\/blog\/#website","url":"https:\/\/kedar.nitty-witty.com\/blog\/","name":"..::CHANGE is INEVITABLE::..","description":"Kedar Vaijanapurkar's Blog for MySQL, technology and various subjects","inLanguage":"en-US","publisher":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/#person"}}]},"og:locale":"en_US","og:site_name":"Change Is Inevitable | Kedar Vaijanapurkar's Blog for MySQL, technology and various subjects","og:type":"article","og:title":"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable","og:description":"MySQL ERROR 1731 'Non matching attribute INSTANT COLUMN(s)' breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.","og:url":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition","article:published_time":"2026-09-14T13:36:10+00:00","article:modified_time":"2026-09-14T13:36:10+00:00","twitter:card":"summary","twitter:title":"MySQL INSTANT DDL breaks EXCHANGE PARTITION | Change Is Inevitable","twitter:description":"MySQL ERROR 1731 'Non matching attribute INSTANT COLUMN(s)' breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures."},"aioseo_meta_data":{"post_id":"3627","title":null,"description":"MySQL ERROR 1731 'Non matching attribute INSTANT COLUMN(s)' breaks EXCHANGE PARTITION after ALGORITHM=INSTANT. This blog offers reasoning and fixtures.","keywords":null,"keyphrases":{"focus":{"keyphrase":"EXCHAGE PARTITION","score":0,"analysis":[]},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-09-12 09:18:32","updated":"2026-09-13 12:38:07","seo_analyzer_scan_date":null,"focus_keyword":"EXCHAGE PARTITION","additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kedar.nitty-witty.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\" title=\"MySQL\">MySQL<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-articles\" title=\"MySQL-Articles\">MySQL-Articles<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tMySQL INSTANT DDL breaks EXCHANGE PARTITION\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/kedar.nitty-witty.com\/blog"},{"label":"MySQL","link":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql"},{"label":"MySQL-Articles","link":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-articles"},{"label":"MySQL INSTANT DDL breaks EXCHANGE PARTITION","link":"https:\/\/kedar.nitty-witty.com\/blog\/mysql-instant-ddl-breaks-exchange-partition"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/posts\/3627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/comments?post=3627"}],"version-history":[{"count":7,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/posts\/3627\/revisions"}],"predecessor-version":[{"id":3636,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/posts\/3627\/revisions\/3636"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/media\/3632"}],"wp:attachment":[{"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/media?parent=3627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/categories?post=3627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/tags?post=3627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}