Free SQL editing and data transfer between databases, Querydog
Manage six types of databases in one place on Windows·Ubuntu·macOS.
WindowsWindows 10 / 11 · 64-bit
Ubuntu LinuxUbuntu 26.04 · x86_64 · DEB
macOSApple Silicon (M1 or later) · DMG
Community is freeProvides SQL editing and basic heterogeneous DDL·data transfer. Pro is paidAdds incremental transfer, scheduling, and Oracle PL/SQL migration.
Querydog is an SQL agent that allows different types of databases to be integrated and used within a single program.
From SQL writing to schema management, data copying, backup·scheduling —
It is designed to be easy and convenient for database beginners.
Data transfer and comparison between DBs such as Oracle·MariaDB
Data migration
Move table structures and data from one database to another. DDL transfer and data copying are executed separately, and some format differences are automatically converted.
After moving, Verification Reportyou can check the transfer results and comparison range. Import/export of Excel·CSV and impact analysis are also provided.
Database Comparison
You can place two databases side by side and check where and how they differ. We summarize whether a table exists only on one side, how the structure (DDL) differs even if the names are the same, and how much the record count differs. This is especially useful when aligning the structures of production and development environments.
Compare two query results row by row NEW
Execute two SQL queries separately and compare the results row by row. We show which rows have changed, which exist only on one side, and which have disappeared, and you can export this to Excel. You can set it to ignore case, leading/trailing spaces, and the time part of dates, making it easy to filter out "essentially identical data."
Free Community vs Paid Pro Features Comparison
Both editions use the same installation file. You can start with the free Community edition, and if you have a Pro license, you can use additional features in the same program.
COMMUNITY
Querydog Community
Free
Functions needed for routine SQL tasks and basic data transfer.
Connect to Oracle·MySQL·MariaDB·PostgreSQL·MSSQL·SQLite and edit SQL
View/edit table data, import/export files
Basic DDL and data transfer between homogeneous and heterogeneous DBs
Transfer result reports and query result comparison
Use AI SQL features with Ollama or your own prepared API key
You can work the same way regardless of which database you use.
Some data types are automatically converted during transfer between DBs. The support scope may vary depending on DB type and version, so check the generated DDL and conversion results before transfer.
Connection passwords are not left in the connection setting file(Connection.ini) and are separated into a separate file in the user account folder for storage.Even if you share the setting file with colleagues or upload it to version control, the password does not go along with it.
Things to check when moving data from Oracle to MariaDB
We disclose transfer methods, type conversions, free range, and validation limits.
Batch transfer between DBs instead of clipboard
Reads multiple rows from the source DB and loads them into the target DB in batches. After checking the DDL preview, execute structure transfer and data copy separately. Transfer screen and mode view
Automatic type conversion and pre-check
Oracle NUMBER(p,s)There are automatic rules, such as converting to MariaDB's DECIMAL(p,s)types. Before executing DDL, you can check the source and target types for each column and warnings about downscaling, and modify and save the target types. Actual value lossless conversion must be verified after transfer. View type review procedures
Community basic transfer and Pro automation
Community provides free basic DDL and data transfer for homogeneous and heterogeneous databases. Incremental transfer, scheduled execution, permission copying, and Oracle PL/SQL migration are in the Pro range. View features by edition
Rechecking interrupted transfers
If source reading is interrupted, the process stops at the current table, and subsequent tables are marked as unprocessed. Tables with failed saves or truncated values are not considered successful. After restoring the connection, you can retry with key comparison synchronization, and matching PK/UNIQUE keys are required on both sides. View retry procedures
Oracle → MariaDB PL/SQL conversion verification record
In isolation tests of Querydog 1.0.45 source, 40/40 collected objects were compiled to MariaDB DDL. Among these, the specified input results of 10 newly created test routines and 259 input results of 4 existing business date functions were confirmed. DDL compilation 40/40 does not indicate overall business migration success rate or data transfer completion rate.
Provides basic features for autocomplete, color highlighting, and SQL formatting. Autocomplete identifies which table you are currently querying and shows only the columns that can be used in that context. Executed queries are automatically saved in history (Ctrl+Shift+H), and frequently used queries can be saved as bookmarks. CASE, MERGE The same sentence patterns can be immediately used as code snippets.
Step-by-step trace execution
You can follow a stored procedure or PL/SQL line by line to see how the values change (except for SQLite).
When tracing, it executes a temporary copyinstead of touching the original, so there is no worry about changing objects in operation.
It also provides a visual query builder and the ability to join tables from different databases into a single SQL (read-only).
Handling large data like photos or documents
Columns containing photos, documents, or long texts are initially ...folded, and only expand when double-clicked. This prevents the screen from becoming heavy.
Even if modifying a row fails, only that row is rolled back, and rows corrected by others first are highlighted in orange to indicate a conflict.
Safely, with visual confirmation
you can preview before sending.
Execution plan visualization NEW
Ctrl+Shift+Pshows in a tree format the order in which your SQL is processed within the database when you press it.
Steps with high cost or reading many rows are highlighted in red or orange, so you can immediately see where adjustments are needed.
Actual ExecutionWhen turned on, you can check actual values, not just estimates (real measurement mode excluded for SQLite).
Prevent accidental deletion in advance NEW
Before executing (F5), the program first scans the SQL. If the syntax is wrong, it catches it and notifies you before sending it to the database.
DELETE without WHERE·UPDATE without WHERE·TRUNCATE·DROPFor dangerous statements like this
It asks once more, 'Do you really want to execute?'
View schemas and structures at a glance
View table information at a glance
Displays the count, size, lock status, compression status, and description in one line in the table list.
With one right-click, you can copy and paste the table, and if the same name exists, (1), (2)It will automatically add a number as shown.
Within the same connection, you can also drag with the mouse to move to another schema.
Create and modify table structures
In the table designer, you can edit columns, indexes, foreign keys, and CHECK constraints, and preview the SQL that will be generated.
It maintains the ascending/descending settings of foreign keys and indexes that reference other schemas, and will warn you before applying if the number of foreign key columns does not match.
Preserves the disabled CHECK state in MSSQL and the NOT VALID status in PostgreSQL, and generates SQL to change the PostgreSQL tablespace.
Unsupported table option changes are blocked before application. View how to use the table designer
The above structure modifications were verified in the source and automated tests of Querydog 1.0.58. The results of applying to actual production DBs need to be separately validated.
ER diagram
Automatically draws a diagram showing how tables are connected. You can drag and arrange boxes, and the layout you create can be saved and reused.
The completed diagram can be exported as SVG, PDF, or PNG to be directly used in meeting materials, and conversely, you can import an SQL file (DDL) to create a diagram.
AI is here to assist
If you explain it verbally, it becomes SQL.
Ask AI to write SQL
If you explain in everyday language, like "Show me the top 10 products in sales last month," AI will generate the SQL statement for you.
You can choose Google Gemini, OpenAI GPT, Anthropic Claude, or even a local AI (Ollama) running on your own computer.
Run AIWhen you run a query, it also tells you what part is causing an error and how to fix it.
Look at the execution plan and indexes for answers
If you ask for tuning, like "Check why this query is slow," the execution plan just extracted and the index information on that table are also provided to the AI.
So you can receive informed responses, such as "It's scanning the entire table because there's no index."
Operations and management
Data optimization
We analyze which tables are heavy and which indexes are fragmented (fragmentation rate) and automatically generate the SQL needed for optimization (ANALYZE, VACUUM, REINDEX, etc.).
We measure how much the character columns are actually used and suggest an appropriate size to reduce wasted space.
Audit History
It automatically records who created which user, who granted or revoked permissions, and which SQL was executed and when.
You can view it directly on the screen or export it to CSV for storage, so you can use it with confidence in work environments where change tracking and accountability are required.
Automatic Execution at Scheduled Times
If you register backup, query, and data transfer tasks on a schedule, they will automatically execute at the designated time.
A mode that runs with commands only, without a screen, is also provided, so you can integrate it into your company's automation system.
Easy-to-View and Safe User Environment
You can choose between a dark or light screen (9 themes) and adjust the font and row height yourself.
Windows (dockable) can be freely arranged and will appear in the same place even after restarting.
The core parts of the program are distributed in compiled form, making them difficult to tamper with.
Querydog vs DBeaver: Data Transfer Speed Comparison
We compared the time it takes to copy large amounts of data between MariaDB, Oracle, PostgreSQL, SQL Server (MSSQL), and SQLite. You can check whether DBeaver’s bulk load option was used, the improvement results by Querydog version, and the verification scope together.
Record update: October 29, 2026 · Querydog source tests version 1.0.11~1.0.24 · DBeaver 26.2.3
This is the actual measurement record for 11 transfer directions conducted so far. Tests with different numbers of rows, indexes, and environments are not compared in a single speed ranking. The DBeaver column shows previous measurements for that direction, and unmeasured or failed cases were not converted into time. 37 tests involve 6,387,550 rows, and 36 tests involve 4,444,314 rows excluding one large table.
Measurement results by transfer direction
Transfer direction
Querydog version
Querydog time
DBeaver record
Data and index conditions
Verification
MariaDB → MariaDB
1.0.11
5 minutes 50.0 seconds
Approximately 5 minutes 22~28 seconds
37 items · 6,387,550 rows · 45 indexes
Verify row count and preservation of existing DDL/indexes
MariaDB → Oracle
1.0.12
4 minutes 21.05 seconds
Approximately 4 minutes 5~34 seconds
37 items · 6,387,550 rows · 0 indexes
Row count matches after adjusting character length
Oracle → MariaDB
1.0.15 / retention code
2 minutes 41.25~41.26 seconds
3 minutes 0.03~4.13 seconds
37 items · 6,387,550 rows · 0 indexes
Measured twice · row count matches · no verification of all values
MariaDB → PostgreSQL
1.0.20
2 minutes 54.70~55.88 seconds
2 minutes 51.22 seconds
36 items · 4,444,314 rows · 0 indexes
Measured twice · Number of rows and separate content hash match
PostgreSQL → MariaDB
1.0.21
3 minutes 1.89~2.27 seconds
4 minutes 49.79 seconds
36 items · 4,444,314 rows · 42 indexes
Measured twice · Matches checksum with DBeaver loaded results
Querydog total row count · Sample 4,421 rows match
Oracle → PostgreSQL
1.0.22
2 minutes 55.01 seconds
Previous bulk load 3 minutes 9.76 seconds
36 items · 4,444,314 rows · 0 indexes
Recent test row count · Sample 4,421 rows match; No simultaneous re-measurement with DBeaver
PostgreSQL → Oracle
1.0.23
3 minutes 27.17 seconds
Not measured
36 items · 4,444,314 rows · 0 indexes
Row count · Sample 4,421 rows match
MariaDB → SQLite
1.0.24
3 minutes 23.45 seconds
Not measured
36 items · 4,444,314 rows · 0 indexes · Local
Row count · Sample 4,421 rows match
SQLite → MariaDB
1.0.24
2 minutes 40.05 seconds
Not measured
36 items · 4,444,314 rows · 0 indexes · Local
Row count · Round-trip sample 4,421 rows match
History of before and after improvements and failures · Interruptions
Below are the major versions and retest history. The initial comparison and error history of MariaDB forward and Oracle forward have been preserved in the existing detailed record at the bottom of this page.
The effect was not reproduced in repetitions, so candidate change was reverted. Retest of the adopted code was 2 minutes 41.25 seconds. The fastest candidate value is not used as the product representative value.
Both measurements with the same final code are within 20 seconds of previous DBeaver actual measurements.
PostgreSQL → MariaDB
1.0.20 → 1.0.21
5 minutes 16.82 seconds → Average 3 minutes 2.08 seconds
Applied server cursor and prefetching. In both cases, 42 indexes and checksum matched DBeaver results.
MariaDB → MSSQL
Previous test → 1.0.22
Previous stop → 9 minutes 42.26 seconds
The previous 50 minutes or more was an estimate, not an actual measurement. General table OPENJSON input, data type and date handling improved. 8 auxiliary indexes are outside the scope of the test.
MariaDB → MSSQL / DBeaver
Microsoft JDBC 13.4.0.0
No completion time
Used Bulk Copy, commit every 20,000 rows. Stopped due to source data read error; 555,077 rows loaded. The time until the interruption is not compared with the successful completion time.
PostgreSQL → Oracle
1.0.22 → 1.0.23
5 minutes 12.84 seconds → 3 minutes 27.17 seconds
105.68 seconds (33.8%) reduction observed. Server cursor, one-batch prefetch, general batch of 10,000 rows.
MariaDB → SQLite
1.0.23 → 1.0.24
3 minutes 45.02 seconds → 3 minutes 23.45 seconds
21.57 seconds (9.6%) reduction observed. Optimized general value conversion checks; streaming and prefetch not applied.
SQLite → MariaDB
1.0.23 → 1.0.24
2 minutes 41.35 seconds → 2 minutes 40.05 seconds
Reverse regression check. Not a result of separate speed improvements.
Measurement method and interpretation scope
Subsequent Querydog tests were measured by executing an actual DataCopyThread separately, like the GUI. DBeaver is based on GUI transfer and log/screen observation. This is not a record of verifying execution performance of the installation file.
This is the data transfer time to an empty target table. DDL creation/correction, initialization, and post-verification were excluded. The 0-index test is not the migration time completed including index creation. Homogeneous MariaDB tests have 45 indexes, PostgreSQL → MariaDB has 42, and MSSQL bidirectional tests have 34 primary key indexes.
DBeaver from MariaDB to PostgreSQL uses bulk load · multi-row INSERT 500. From PostgreSQL to MariaDB, multi-row INSERT 500 was used, and the target bulk load option was disabled. Previous DBeaver tests from Oracle to MariaDB were under conditions with both options turned off.
In the recent Oracle ↔ PostgreSQL tests, DBeaver could not be re-measured due to UI control issues. Only previous records of Oracle → PostgreSQL were shown as reference. DBeaver comparison with SQLite was not performed.
SQLite tests were between local files and local MariaDB. The existing WAL, 64MB cache, and synchronous=OFF settings were maintained. These durability settings and the local environment should not be interpreted as the same as other remote DB conditions.
A sample of 4,421 rows matching does not mean full cell verification. The PostgreSQL → MariaDB checksum is a comparison between the results created in MariaDB by both programs. Differences in row order of one SQLite sample table were checked by comparing all 20 rows without considering order to confirm value matches.
Cache initialization and server load control were not performed. Unless repeated measurements are noted, results are from a single measurement, and results by date/version do not guarantee the speed or complete production transfer of all environments.
Measurement Date: · Internal measurement by Windsoft · Each program run once from Windows GUI
Data was copied from the same source MariaDB to the same remote MariaDB. Before each run, only the data in the target tables was cleared while maintaining the existing table structure and indexes. In this run Querydog took 5 minutes 50.0 seconds, DBeaver about 5 minutes 22~28 seconds, so Querydog took about 22~28 seconds (7~9%) longer.
MariaDB data copy time and post-verification results
Comparison Items
Querydog Community 1.0.11
DBeaver 26.2.3
Duration
5 minutes 50.0 seconds (350.0 seconds)
About 5 minutes 22~28 seconds (322~328 seconds)
Time Measurement Method
Internal measurement from start to finish of transfer worker
Observed range from execution command to UI task completion
Tables / Total Rows
37 / 6,387,550 rows
37 / 6,387,550 rows
Row count check per table
All 37 match the source
All 37 match the source
Existing Indexes
45 maintained
45 maintained
Table Definition (DDL)
Matches the pre-run standard
Matches the pre-run standard
Error Check
Report: Success 37, Skipped 0, Error 0
No error dialog observed Separate error count not secured
Measurement conditions and result interpretation
Executed in the order of Querydog → target initialization → DBeaver. Initialization, wizard settings, and post-validation time were excluded, and DB/OS caches were not cleared.
Both programs input data into tables with existing indexes. This test did not compare the time to create new tables or indexes or the performance of heterogeneous DB conversion.
Querydog used native MariaDB read and bulk input with 2,000-row batches, while DBeaver used 10,000-row reads and driver batching. Both apps commit in units of 20,000 rows, and internal driver and constraint check settings differ.
Querydog’s internal FK/unique check optimizations were used, while DBeaver’s option to disable referential integrity checks was not used. The existing compressed table format of the target was maintained in both tests.
DDL was compared to each DB's pre-execution baseline, excluding the current AUTO_INCREMENT counter. Full-cell comparisons, checksums, or orphan FK row checks were not included in this performance test.
Each measurement was conducted once on the same data and target. Detailed specifications of equipment, DB version, network, and variance from repeated measurements are not provided, so performance in other environments or the overall superiority of the products is not guaranteed.
Note: The separate execution record of the previous Querydog 1.0.10 was 6 minutes 18.2 seconds. This version 1.0.11 reduced that record by about 28.2 seconds (7.46%). The measured version and the currently available installation file version may differ.
MariaDB → Oracle transfer: Actual measurement comparison between Querydog and DBeaver
Measurement date: October 27, 2026 · 37 default tables · Original 6,387,550 rows · Target Oracle 21c XE
Querydog 1.0.12 completed the transfer of 37 tables in 4 minutes 21.05 secondsand in the post-check, the row count of all tables matched the source. This result falls within the previous DBeaver measurement range of about 4 minutes 5~34 seconds. Since the execution method and drivers are different, this is not a test to determine speed superiority between products.
Oracle data loading results for the same corrected tables
Items
DBeaver 26.2.3
Querydog 1.0.11 Before correction
Querydog 1.0.12 After correction
Duration
Approximately 4 minutes 5~34 seconds (245.125~273.854 seconds)
5 minutes 29.09 seconds (329.09 seconds)
4 minutes 21.05 seconds (261.05 seconds)
Transfer results
Row count match for 37 tables
Success: 33 / Fail: 4
Success: 37 / Errors: 0 / Warnings: 0
Actual loaded row count
6,387,550 rows
5,997,256 rows
6,387,550 rows
Verification of row count by table
All 37 match
33 match / 4 not loaded
All 37 match
Target Index
0 items
0 items
0 items
Execution/Measurement Method
GUI transmission / observation period of execution/termination screen
GUI transmission / internal worker measurement
Using an independently executed actual transmission worker like GUI / internal time measurement
Error correction and time changes
The first execution of DBeaver occurred due to differences based on the number of characters and bytes ORA-12899that occurred. After correcting the target string column length based on the character count, the result of retransmission was recorded in the table above. Querydog also used the same corrected table.
In Querydog 1.0.11, 4 tables failed due to case and quotation handling issues in Oracle column names. In 1.0.12, it was modified to preserve the actual column names, reduced repetitive value conversions and row copying, and increased the general table input batch from 5,000 rows to 20,000 rows.
The observed time after modification was approximately reduced by 68 seconds (20.7%). However, the executions before modification include failures for some tables, whereas the executions after modification were all successful, so it cannot be interpreted as a pure performance improvement rate for the same amount of successful executions.
Measurement Conditions and Verification Scope
This is a test of loading data into existing tables. Test data was cleared before each execution, and the condition of 0 indexes was maintained. Time for table/index creation, error correction, initialization, and post-verification was excluded. The above MariaDB target test maintains 45 indexes, so the times of the two tests should not be directly compared.
Querydog 1.0.12 called the actual transfer worker from a separate executor. For regular tables, it used batches of 20,000 rows with automatic commit per batch, while small LOB batches were maintained. DBeaver used driver batching with commits every 20,000 rows.
After the modifications, the first feature verification also matched the total row count, but due to console output errors in the test executor, that time was excluded from the representative value. The table used the result of a single re-measurement after correcting the output issues.
Row count matching was verified, but checksums and full comparisons of all cell values were not performed. Handling of NULL for empty strings, auto-increment, LONGTEXT capacity differences, indexes, keys, views, procedures, etc., need separate review before full operation.
This is a sequential execution record on the same target, and cache initialization, distributed repeated measurement, and server load control were not performed. Differences in environment and execution method mean it does not guarantee the overall performance superiority of the product. The tested source version may differ from the downloaded installation file version.
Are you looking for alternatives to Navicat and DBeaver?
You can continue tasks such as connecting to multiple databases, executing SQL, and checking table structures and data in Querydog. It is a database management tool for users on Windows, Ubuntu, and macOS handling Oracle, MySQL, MariaDB, PostgreSQL, SQL Server, and SQLite.
Check SQL editing and execution results, schema comparison, data copying and verification, backup, and scheduling functions according to actual tasks. Available features may vary depending on the type and version of the DB.