#!/usr/bin/env bash set -euo pipefail # Export Concelier linksets/advisory_chunks from Postgres to a tar.zst bundle. # Usage: # PGURI=postgres://user:pass@host:5432/db \ # ./scripts/concelier/export-linksets-tarball.sh out/linksets/linksets-stage-backfill.tar.zst # # Optional env: # PGSCHEMA=public # schema that owns linksets/advisory_chunks # LINKSETS_TABLE=linksets # table name for linksets # CHUNKS_TABLE=advisory_chunks # table name for advisory chunks # TMPDIR=/tmp/export-linksets # working directory (defaults to mktemp) TARGET="${1:-}" if [[ -z "${TARGET}" ]]; then echo "Usage: PGURI=... $0 out/linksets/linksets-stage-backfill.tar.zst" >&2 exit 1 fi if [[ -z "${PGURI:-}" ]]; then echo "PGURI environment variable is required (postgres://...)" >&2 exit 1 fi PGSCHEMA="${PGSCHEMA:-public}" LINKSETS_TABLE="${LINKSETS_TABLE:-linksets}" CHUNKS_TABLE="${CHUNKS_TABLE:-advisory_chunks}" WORKDIR="${TMPDIR:-$(mktemp -d)}" mkdir -p "${WORKDIR}" OUTDIR="$(dirname "${TARGET}")" mkdir -p "${OUTDIR}" echo "==> Exporting linksets from ${PGSCHEMA}.${LINKSETS_TABLE}" psql "${PGURI}" -c "\copy (select row_to_json(t) from ${PGSCHEMA}.${LINKSETS_TABLE} t) to '${WORKDIR}/linksets.ndjson'" echo "==> Exporting advisory_chunks from ${PGSCHEMA}.${CHUNKS_TABLE}" psql "${PGURI}" -c "\copy (select row_to_json(t) from ${PGSCHEMA}.${CHUNKS_TABLE} t) to '${WORKDIR}/advisory_chunks.ndjson'" LINKSETS_COUNT="$(wc -l < "${WORKDIR}/linksets.ndjson")" CHUNKS_COUNT="$(wc -l < "${WORKDIR}/advisory_chunks.ndjson")" echo "==> Writing manifest.json" jq -n --argjson linksets "${LINKSETS_COUNT}" --argjson advisory_chunks "${CHUNKS_COUNT}" \ '{linksets: $linksets, advisory_chunks: $advisory_chunks}' \ > "${WORKDIR}/manifest.json" echo "==> Building tarball ${TARGET}" tar -I "zstd -19" -cf "${TARGET}" -C "${WORKDIR}" linksets.ndjson advisory_chunks.ndjson manifest.json echo "==> SHA-256" sha256sum "${TARGET}" echo "Done. Workdir: ${WORKDIR}"