Viewing Installed Extensions
Query installed extensions using the INFORMATION_SCHEMA view:- 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:
Configuring veb_dir
To change the extension directory location, setveb_dir in your MySQL configuration file:
my.cnf / my.ini:
- Path must be absolute (not relative)
- Directory must exist before server start
- MySQL user must have read permissions on the directory
- Only one
veb_diris supported (cannot have multiple paths) - Changes require server restart to take effect
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:
.veb file in veb_dir and reinstall:
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
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:
-
Check VEB filename matches manifest:
-
Verify manifest.json name field:
-
Check extension registration in code:
- VEB filename:
my_extension.veb - manifest.json:
"name": "my_extension" - Extension code:
make_extension("my_extension", ...)
- Using hyphens in manifest:
"name": "my-extension"❌ - VEB filename doesn’t match:
my-extension.vebvs"name": "my_extension"❌ - Code registration differs:
make_extension("myextension", ...)❌
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.
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.
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
-
Uninstall the current version:
-
Replace the .veb file:
-
Install the new version:
-
Verify the update:
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:- Check Error Log: Most extension errors are logged with details
- Review Extension Docs: Extension-specific troubleshooting may exist
- Ask on Discord: Join the VillageSQL Discord
- 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

