@@ -20,7 +20,7 @@
|
||||
# CH_USER default default
|
||||
# CH_PASSWORD optional
|
||||
# CH_SECURE set to 1 to use TLS (--secure)
|
||||
# SQLCMD_PATH optional full path to sqlcmd if not on PATH
|
||||
# MSSQL_INSTALL_DEPS_IF_MISSING set to 1 to auto-run Microsoft ODBC + sqlcmd install when missing (sudo)
|
||||
#
|
||||
# Example:
|
||||
# export MSSQL_HOST=sql.mycompany.internal MSSQL_USER=ro MSSQL_PASSWORD='***' MSSQL_DATABASE=sales
|
||||
@@ -70,6 +70,8 @@ Options:
|
||||
--ch-table TABLE ClickHouse table name
|
||||
--out PATH File path (default: ./mssql_export.tsv)
|
||||
--out-dir PATH Directory for migrate-db TSV files (default: ./mssql_export_all)
|
||||
--install-deps-if-missing If sqlcmd is not installed, run the same steps as --install-deps first (needs sudo).
|
||||
Or set env MSSQL_INSTALL_DEPS_IF_MISSING=1 for the same behavior.
|
||||
|
||||
Environment:
|
||||
MSSQL_HOST, MSSQL_PORT, MSSQL_USER, MSSQL_PASSWORD, MSSQL_DATABASE
|
||||
@@ -79,6 +81,7 @@ Environment:
|
||||
CH_HOST, CH_PORT, CH_USER, CH_PASSWORD, CH_SECURE=1 for TLS
|
||||
CH_DOCKER_CONTAINER optional; run clickhouse-client inside this container
|
||||
SQLCMD_PATH optional; full path to sqlcmd when not on PATH
|
||||
MSSQL_INSTALL_DEPS_IF_MISSING set to 1 to install mssql-tools18 when sqlcmd is missing (same as --install-deps-if-missing)
|
||||
|
||||
Notes:
|
||||
- ClickHouse columns must match export order and types.
|
||||
@@ -95,17 +98,23 @@ ensure_sqlcmd() {
|
||||
if command -v sqlcmd >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
die "sqlcmd not found (no Microsoft mssql-tools18 on this machine yet).
|
||||
die "sqlcmd not found (Microsoft mssql-tools18 is not installed).
|
||||
|
||||
Install it with (needs sudo; ~2 minutes):
|
||||
Option A — one combined command (will prompt for sudo if needed):
|
||||
|
||||
$0 migrate-db --install-deps-if-missing --ch-database ... --out-dir ...
|
||||
|
||||
Option B — two steps:
|
||||
|
||||
$0 --install-deps
|
||||
$0 migrate-db ...
|
||||
|
||||
Then re-run migrate-db. Quick check:
|
||||
Option C — same shell, no flag:
|
||||
|
||||
ls -la /opt/mssql-tools18/bin/sqlcmd
|
||||
export MSSQL_INSTALL_DEPS_IF_MISSING=1
|
||||
$0 migrate-db ...
|
||||
|
||||
Or set SQLCMD_PATH=/full/path/to/sqlcmd if you installed sqlcmd elsewhere."
|
||||
Or set SQLCMD_PATH=/full/path/to/sqlcmd"
|
||||
}
|
||||
|
||||
ensure_clickhouse_client() {
|
||||
@@ -640,9 +649,14 @@ main() {
|
||||
local out_file="./mssql_export.tsv"
|
||||
local out_dir="./mssql_export_all"
|
||||
local tables_file="${MSSQL_TABLES_FILE:-}"
|
||||
local install_deps_if_missing=0
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--install-deps-if-missing)
|
||||
install_deps_if_missing=1
|
||||
shift
|
||||
;;
|
||||
--mssql-table)
|
||||
mssql_table="$2"
|
||||
shift 2
|
||||
@@ -681,6 +695,20 @@ main() {
|
||||
esac
|
||||
done
|
||||
|
||||
local needs_sqlcmd=0
|
||||
case "$cmd" in
|
||||
migrate-db | list-tables | export | export-import) needs_sqlcmd=1 ;;
|
||||
esac
|
||||
|
||||
if [[ "$needs_sqlcmd" -eq 1 ]]; then
|
||||
if [[ "${MSSQL_INSTALL_DEPS_IF_MISSING:-0}" == "1" || "$install_deps_if_missing" -eq 1 ]]; then
|
||||
if ! command -v sqlcmd >/dev/null 2>&1; then
|
||||
echo "$SCRIPT_NAME: sqlcmd not found; running install_deps (Microsoft ODBC + mssql-tools18; needs sudo)..." >&2
|
||||
install_deps
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
case "$cmd" in
|
||||
export)
|
||||
run_export "$mssql_table" "$mssql_query" "$out_file"
|
||||
|
||||
Reference in New Issue
Block a user