Skip to main content

Viewing Installed Extensions

Query installed extensions using the INFORMATION_SCHEMA view:
Output:
Usage:
  • Use in both interactive sessions and scripts
  • Standard SQL interface compatible with MySQL tools

Checking Extension Functions

Verify extension functions work after installation:

Extension Directory

Check where VillageSQL looks for .veb files:
List available extensions:

Configuring veb_dir

To change the extension directory location, set veb_dir in your MySQL configuration file: my.cnf / my.ini:
Requirements:
  • Path must be absolute (not relative)
  • Directory must exist before server start
  • MySQL user must have read permissions on the directory
  • Only one veb_dir is supported (cannot have multiple paths)
  • Changes require server restart to take effect
Verify after restart:

Troubleshooting

Quick Reference

Extension Not Found

Error: Extension 'my_extension' not found Debug steps:

Function Not Available After Install

Error: FUNCTION my_func does not exist Debug steps:

Extension Shows Old Behavior After Update

Symptom: After replacing a .veb file and reinstalling, the extension still runs old code. Cause: VillageSQL expands .veb files into _expanded/ on first load. If you copy a new .veb without first running UNINSTALL EXTENSION, the server continues using the previously-expanded .so that is already loaded in memory. Solution: Always follow the full UNINSTALL → replace → INSTALL cycle:
Then replace the .veb file in veb_dir and reinstall:
If the extension still shows old behavior, clear the expansion cache before reinstalling:

Cannot Uninstall Extension

Error: Cannot uninstall extension: types in use Solution:

Library Loading Errors

Error: Cannot load library: undefined symbol Causes:
  • Missing library dependencies
  • ABI compatibility mismatch
  • Incorrect MySQL version
Debug:

Extension Name Validation Errors

Error: Failed to load VEF extension 'extension_name' with log message Extension name mismatch Cause: The extension name in manifest.json doesn’t match the VEB filename or the name registered in the extension code. Debug steps:
  1. Check VEB filename matches manifest:
  2. Verify manifest.json name field:
  3. Check extension registration in code:
Solution: All three names must be identical, using underscores (see Extension Naming Conventions):
  • VEB filename: my_extension.veb
  • manifest.json: "name": "my_extension"
  • Extension code: make_extension("my_extension", ...)
Common mistakes:
  • Using hyphens in manifest: "name": "my-extension"
  • VEB filename doesn’t match: my-extension.veb vs "name": "my_extension"
  • Code registration differs: make_extension("myextension", ...)
Correct example:

Custom Type Comparison Errors

Error: Cannot compare types X and Y in = Cause: Both sides of the comparison are custom types but from different types or extensions.
Solution: Ensure both sides of a comparison use the same custom type. If you need to compare across types, convert one side explicitly using the appropriate type conversion function.
Error: Unable to implicitly cast a non-custom type during compare with a custom type in = Cause: One side of the comparison is a custom type column and the other is a value (literal or column) that cannot be automatically converted to that type.
Solution: String literals are automatically cast to the custom type using the type’s encode function. For other types (integers, floats), use an explicit conversion function:

Monitoring Extension Usage

Query Performance

Track UDF execution times using performance_schema:

Custom Type Usage

Track which tables use custom types:

Updating Extensions

To update an extension to a newer version, use the manual update process:
ALTER EXTENSION UPDATE is not supported in v0.0.3 and is planned for a future release.

Manual Update Process

  1. Uninstall the current version:
  2. Replace the .veb file:
  3. Install the new version:
  4. Verify the update:
Data Safety: If tables use custom types from the extension, you must drop or alter those tables before uninstalling. Back up your data first.
Example:

Cleaning Up

Remove Orphaned Expansion Directories

VillageSQL expands .veb files to _expanded/{name}/{sha256}/. Old versions accumulate over time.
Server restart automatically cleans up orphaned expansion directories.

Getting Help

If you encounter issues not covered here:
  1. Check Error Log: Most extension errors are logged with details
  2. Review Extension Docs: Extension-specific troubleshooting may exist
  3. Ask on Discord: Join the VillageSQL Discord
  4. File an Issue: Report bugs on GitHub Issues

Next Steps

System Reference

Query system tables and views

Uninstall Extensions

Remove extensions safely

Extension Architecture

Understand the internals