Skip to content

Preview, Undo & Tables (PRO)

Run Search and Replace on Selected Tables (PRO)

Running a search and replace against your whole database is slower than it needs to be and touches tables you may not want changed. Update URLs PRO adds a Select Tables picker so you scope a run to only the tables that hold the values you are replacing. Certain plugin tables are protected and never touched, whatever you select.

PRO feature

Choosing specific tables is available in Update URLs PRO. The free version always runs against fixed targets across the whole table — post content, excerpts, attachments, links, custom fields, and GUIDs — with no table picker. See the free search and replace guide for the free targets.

Why scope a run to specific tables

  • Speed — skipping tables that cannot contain your search term avoids scanning millions of irrelevant rows.
  • Safety — you avoid touching tables you did not intend to change.
  • Precision — you can target a single plugin's table when you know exactly where a value lives.

Select the tables to include

  1. Go to Update URLS → Search & Replace.
  2. Enter your Search For and Replace With values.
  3. Open Select Tables — a dual-column multiselect.
  4. In the left column, Available Tables, use the filter box to find tables (each is listed with its size), or click Select All.
  5. Move the tables you want into the right column, Tables to Include.
  6. Set your options and run the replace (keep a Dry Run on the first pass).

Protected tables are never touched

Some tables are always excluded from search and replace, even if you try to select them, because changing them would corrupt the plugin's own records or the background queue. Protected tables include:

Protected table Why it is excluded
kc_uu_history Stores your search/replace History
kc_uu_undo Stores the per-value undo journal
kc_uu_profiles Stores saved search/replace profiles
actionscheduler_* Powers background jobs (actions, claims, groups, logs)
kc_uu_tmp_* Temporary staging tables used during a run

The plugin's own options and meta keys (kc_uu_*) are also skipped column-wise, so a run never rewrites Update URLs' own settings. You can adjust the protected list programmatically with the kc_uu_protected_tables filter.

A note on the site URL

The siteurl option is handled carefully: it is staged during a run and only written after a real (non-dry) replace completes, never during a Dry Run. This prevents a preview from changing the address WordPress uses to load itself mid-run.

Conclusion

Scoping a search and replace to selected tables keeps runs fast and predictable while protected tables keep the plugin's own history, undo journal, and job queue safe. Pair table selection with a Dry Run preview so you can confirm the matches in those tables before writing, and save a frequently used table set as a profile.

FAQs

Can I choose which tables to search and replace in the free version?

No. Table selection is an Update URLs PRO feature. The free version always runs against fixed, whole-table targets — post content, excerpts, attachments, links, custom fields, and GUIDs — and does not show a table picker. To scope a run to specific tables you need PRO.

Which tables can never be changed?

Update URLs protects its own tables — kc_uu_history, kc_uu_undo, and kc_uu_profiles — along with the Action Scheduler tables (actionscheduler_*) and any temporary kc_uu_tmp_* staging tables. These are excluded even if selected, because rewriting them would corrupt the plugin's records or its background job queue.

How do I find a specific table in the list?

The Select Tables picker has a filter box above the Available Tables column. Type part of a table name to narrow the list, then move the tables you want into Tables to Include. Each table is shown with its size so you can gauge how long a run will take.

Does selecting fewer tables make a run faster?

Yes. A search and replace only scans the tables you include, so excluding tables that cannot contain your search term avoids reading their rows entirely. On large databases, scoping to the few tables that actually hold the value is significantly faster than running against everything.

Was this page helpful?