diff --git a/.gitignore b/.gitignore index 5ef6a52..4f1d653 100644 --- a/.gitignore +++ b/.gitignore @@ -1,41 +1,42 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/versions - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# env files (can opt-in for committing if needed) -.env* - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts +.claude/ diff --git a/app/components/DocsSidebarComponent.tsx b/app/components/DocsSidebarComponent.tsx index 3610a58..535b141 100644 --- a/app/components/DocsSidebarComponent.tsx +++ b/app/components/DocsSidebarComponent.tsx @@ -13,6 +13,9 @@ const navItems: NavItem[] = [ { title: "Installation", href: "/installation", + children: [ + { title: "Agent mode", href: "/installation/agent" }, + ], }, { title: "Storages", diff --git a/app/databasus-vs-barman/page.tsx b/app/databasus-vs-barman/page.tsx index cb059ce..9020de8 100644 --- a/app/databasus-vs-barman/page.tsx +++ b/app/databasus-vs-barman/page.tsx @@ -81,13 +81,15 @@ export default function DatabasusVsBarmanPage() {

Databasus vs Barman

- Databasus and Barman are both PostgreSQL backup tools, but they - take fundamentally different approaches. Databasus provides an - intuitive web interface for logical backups with team - collaboration features, while Barman (Backup and Recovery - Manager) is a command-line tool focused on physical backups and - Point-in-Time Recovery (PITR) for enterprise disaster recovery - scenarios. + Databasus and Barman are both PostgreSQL backup tools that + support physical backups, WAL archiving and Point-in-Time + Recovery. Databasus provides an intuitive web interface with + both logical and physical backup capabilities, team + collaboration features and support for multiple database + engines. Barman (Backup and Recovery Manager) is a + command-line tool with advanced features like rsync-based + incremental backups, streaming replication integration and + Barman-to-Barman geo-redundancy.

Quick comparison

@@ -109,10 +111,10 @@ export default function DatabasusVsBarmanPage() { Target audience - Individuals, teams, enterprises + Individuals, teams, DBAs, enterprises - DBAs, enterprises requiring PITR + DBAs, enterprises @@ -129,13 +131,13 @@ export default function DatabasusVsBarmanPage() { Backup type - Logical (pg_dump) + Logical + Physical Physical (file-level) Recovery options - ❌ No PITR (restore to any hour or day) + ✅ PITR + logical restore ✅ WAL-based PITR (second-precise) @@ -143,11 +145,23 @@ export default function DatabasusVsBarmanPage() { Incremental backups - - Full backups with compression - + ✅ WAL-based rsync-based incremental + + Remote backups + ✅ Yes + + ❌ No (requires filesystem access) + + + + Agent backups + ✅ Yes + + ✅ Yes + + Multi-server management Per-database scheduling @@ -229,6 +243,11 @@ export default function DatabasusVsBarmanPage() { with comprehensive security, multiple storage destinations and notification channels. +
  • + DBAs and disaster recovery: Physical + backups, WAL archiving and PITR for mission-critical systems + with near-zero data loss requirements. +
  • Barman audience

    @@ -242,19 +261,16 @@ export default function DatabasusVsBarmanPage() {
  • Enterprise DBAs: Professionals who need centralized backup management for multiple PostgreSQL servers - from a single location. + from a dedicated backup server.
  • - Disaster recovery specialists: Teams - requiring second-precise Point-in-Time Recovery for - mission-critical systems. + Teams needing rsync-based incremental: + File-level diffing reduces backup time and network usage for + large clusters.
  • - - Organizations with strict RPO/RTO requirements - - : Where Recovery Point Objective demands minimal data loss and - WAL-based recovery is essential. + Geo-redundancy requirements: Barman-to-Barman + replication for geographical redundancy across data centers.
  • @@ -265,26 +281,33 @@ export default function DatabasusVsBarmanPage() { with distinct advantages:

    -

    Databasus: Logical backups

    +

    + Databasus: Logical + Physical backups +

    - Databasus uses pg_dump for logical backups, - creating SQL representations of your data (in parallel mode): + Databasus supports both logical and physical backup + strategies:

    @@ -328,21 +351,25 @@ export default function DatabasusVsBarmanPage() { @@ -369,17 +396,15 @@ export default function DatabasusVsBarmanPage() {

    - Note: For most - applications, restoring to the nearest hour or day (as - Databasus provides) is sufficient. Second-precise PITR is - typically only required for mission-critical financial or - transactional systems where every transaction must be - recoverable.{" "} + Note: Both + tools support PITR. Barman additionally offers standby + creation from backups and SSH-based remote recovery to other + servers, which can be valuable for high availability setups.{" "} - Learn why Databasus doesn't support PITR → + Learn how Databasus supports PITR →

    @@ -714,8 +739,9 @@ export default function DatabasusVsBarmanPage() { etc.
  • - Restoring to any hour or day meets your recovery - requirements + You want to manage backups for multiple databases from a + single dashboard with scheduling, notifications and team + features
  • You want quick setup with minimal PostgreSQL expertise @@ -734,16 +760,19 @@ export default function DatabasusVsBarmanPage() {

    - For most use cases, from individual projects to enterprise - deployments, Databasus provides the right balance of power and - usability — and works seamlessly with both self-hosted and - cloud-managed databases. Databasus is suitable for comprehensive - backup management, not just backups. Barman remains the - specialized choice for organizations with strict PITR - requirements on self-hosted infrastructure and dedicated DBA - teams, or for teams building database platforms that need to - provide PITR capabilities to their customers. + Both tools support physical backups, WAL archiving and + PITR. Databasus provides the right balance of power and + usability with its web interface, team features and support + for both logical and physical backups — working seamlessly + with both self-hosted and cloud-managed databases. Barman + remains the specialized choice for organizations that need + rsync-based incremental backups, streaming replication + integration, Barman-to-Barman geo-redundancy or standby + creation from backups.

    diff --git a/app/databasus-vs-pgbackrest/page.tsx b/app/databasus-vs-pgbackrest/page.tsx index 964b20f..3ca951c 100644 --- a/app/databasus-vs-pgbackrest/page.tsx +++ b/app/databasus-vs-pgbackrest/page.tsx @@ -82,11 +82,14 @@ export default function DatabasusVsPgBackRestPage() {

    Databasus and pgBackRest are both powerful PostgreSQL backup - tools, but they serve fundamentally different purposes and - audiences. While Databasus provides an intuitive web interface - for individuals, teams and enterprises of all sizes, pgBackRest - is a specialized command-line tool designed primarily for DBAs - managing very large databases (500GB+). + tools that support physical backups, WAL archiving and + Point-in-Time Recovery. Databasus provides an intuitive web + interface with both logical and physical backup capabilities for + individuals, teams and enterprises. pgBackRest is a specialized + command-line tool with advanced features like block-level + incremental backups, differential backups and delta restore — + designed primarily for DBAs managing very large databases + (1TB+).

    Quick comparison

    @@ -108,7 +111,7 @@ export default function DatabasusVsPgBackRestPage() { Target audience - Individuals, teams, enterprises + Individuals, teams, DBAs, enterprises DBAs, large enterprises (~1TB+ DBs) @@ -133,14 +136,12 @@ export default function DatabasusVsPgBackRestPage() { Backup type - Logical (full backup) + Logical + Physical Physical (file-level) Recovery options - - ❌ No PITR (restore to any hour or day) - + ✅ PITR + logical restore ✅ WAL-based PITR (second-precise) @@ -154,11 +155,31 @@ export default function DatabasusVsPgBackRestPage() { Incremental backups - - Full backups with compression - + ✅ WAL-based Block-level incremental + + Differential backups + ❌ No + ✅ Yes + + + Delta restore + ❌ No + ✅ Yes (changed files only) + + + Remote backups + ✅ Yes + + ❌ No (requires filesystem access) + + + + Agent backups + ✅ Yes + ✅ Yes + Team features @@ -225,6 +246,11 @@ export default function DatabasusVsPgBackRestPage() { with comprehensive security, multiple storage destinations and notification channels.
  • +
  • + DBAs and disaster recovery: Physical backups, + WAL archiving and PITR for mission-critical systems with + near-zero data loss requirements. +
  • pgBackRest audience

    @@ -246,8 +272,9 @@ export default function DatabasusVsPgBackRestPage() { proficiency.
  • - Mission-critical systems: Where - second-precise Point-in-Time Recovery is a strict requirement. + Very large scale: Where block-level + incremental backups, differential backups and delta restore + are essential for performance.
  • @@ -258,30 +285,33 @@ export default function DatabasusVsPgBackRestPage() { with distinct advantages:

    -

    Databasus: Logical backups

    +

    + Databasus: Logical + Physical backups +

    - Databasus uses pg_dump for logical backups, - creating SQL representations of your data (in parallel mode): + Databasus supports both logical and physical backup strategies:

    @@ -323,21 +353,25 @@ export default function DatabasusVsPgBackRestPage() { @@ -364,17 +398,16 @@ export default function DatabasusVsPgBackRestPage() {

    - Note: For most - applications, restoring to the nearest hour or day (as - Databasus provides) is sufficient. Second-precise PITR is - typically only required for mission-critical financial or - transactional systems where every transaction must be - recoverable.{" "} + Note: Both tools + support PITR. pgBackRest additionally offers delta restore + (only fetching changed files), differential backups and + standby creation from backups — features optimized for very + large databases.{" "} - Learn why Databasus doesn't support PITR → + Learn how Databasus supports PITR →

    @@ -660,8 +693,9 @@ export default function DatabasusVsPgBackRestPage() { etc.
  • - Restoring to any hour or day meets your recovery - requirements + You want to manage backups for multiple databases from a + single dashboard with scheduling, notifications and team + features
  • You want quick setup with minimal PostgreSQL expertise @@ -683,11 +717,15 @@ export default function DatabasusVsPgBackRestPage() { (~1TB+)
  • - You require second-precise Point-in-Time Recovery for - mission-critical systems + You need block-level incremental backups for reduced storage + at very large scale
  • - Block-level incremental backups are essential for your scale + You need differential backups or delta restore (only changed + files) +
  • +
  • + You need standby creation from backups for high availability
  • You're comfortable with command-line tools and @@ -696,24 +734,21 @@ export default function DatabasusVsPgBackRestPage() {
  • Your organization has dedicated DBA expertise available
  • -
  • - You use self-hosted PostgreSQL databases (not cloud-managed) -
  • - For most use cases, from individual projects to production - databases and to enterprise deployments, Databasus provides the - right balance of power and usability — and works seamlessly with - both self-hosted and cloud-managed databases. Databasus is - suitable for comprehensive backup management, not just backups. + Both tools support physical backups, WAL archiving and PITR. + Databasus provides the right balance of power and usability with + its web interface, team features and support for both logical + and physical backups — working seamlessly with both self-hosted + and cloud-managed databases.

    pgBackRest remains the specialized choice for DBAs managing very - large self-hosted databases where its advanced features become - necessary, or for teams building database platforms that need to - provide PITR capabilities to their customers. + large self-hosted databases where block-level incremental + backups, differential backups and delta restore become essential + at scale.

    diff --git a/app/databasus-vs-pgbackweb/page.tsx b/app/databasus-vs-pgbackweb/page.tsx index fb0855b..a7361a7 100644 --- a/app/databasus-vs-pgbackweb/page.tsx +++ b/app/databasus-vs-pgbackweb/page.tsx @@ -160,6 +160,26 @@ export default function DatabasusVsPgBackWebPage() { Manual Docker setup + + Physical backups + ✅ Yes + ❌ Not available + + + Incremental backups + ✅ WAL-based + ❌ Not available + + + WAL archiving + ✅ Continuous streaming + ❌ Not available + + + Point-in-Time Recovery + ✅ Yes + ❌ Not available + @@ -183,6 +203,15 @@ export default function DatabasusVsPgBackWebPage() { +

    + Beyond logical backups, Databasus also supports physical + backups with continuous WAL archiving and Point-in-Time + Recovery through its agent mode. This enables incremental + backups, disaster recovery with near-zero data loss and + restore to any second between backups — features that + PgBackWeb does not offer at all. +

    +

    Storage options

    @@ -503,6 +532,10 @@ export default function DatabasusVsPgBackWebPage() {

  • Quick installation with one-line script or Docker
  • Intuitive modern UI with minimal learning curve
  • Permissive Apache 2.0 license for commercial use
  • +
  • + Physical backups, incremental backups, WAL archiving and + PITR for disaster recovery +
  • diff --git a/app/databasus-vs-wal-g/page.tsx b/app/databasus-vs-wal-g/page.tsx index 00bdd2e..18d8fac 100644 --- a/app/databasus-vs-wal-g/page.tsx +++ b/app/databasus-vs-wal-g/page.tsx @@ -81,13 +81,14 @@ export default function DatabasusVsWalGPage() {

    Databasus and WAL-G are both capable backup tools that support - PostgreSQL, but they take fundamentally different approaches. - Databasus focuses on comprehensive backup management with an - intuitive web interface, while WAL-G is a command-line tool that - supports multiple database systems including PostgreSQL, MySQL, - MS SQL, MongoDB and others. If you need a user-friendly solution - for managing backups across multiple databases, Databasus offers - a more streamlined experience. + PostgreSQL with physical backups, WAL archiving and + Point-in-Time Recovery. Databasus focuses on comprehensive + backup management with an intuitive web interface and both + logical and physical backup capabilities. WAL-G is a + command-line tool that uses a custom streaming protocol for + slightly better performance, supports delta backups (changed + pages only) and covers more database engines including MS SQL, + FoundationDB and Greenplum.

    Quick comparison

    @@ -125,7 +126,7 @@ export default function DatabasusVsWalGPage() { Backup type - Logical (pg_dump) + Logical + Physical Physical (WAL archiving) @@ -136,7 +137,7 @@ export default function DatabasusVsWalGPage() { Recovery options - ❌ No PITR (restore to any hour or day) + ✅ PITR + logical restore ✅ WAL-based PITR (second-precise) @@ -144,13 +145,25 @@ export default function DatabasusVsWalGPage() { Incremental backups - - Full backups with compression - + ✅ WAL-based Delta backups (changed pages only) + + Remote backups + ✅ Yes + + ❌ No (local agent only) + + + + Agent backups + ✅ Yes + + ✅ Yes + + Team features @@ -311,6 +324,16 @@ export default function DatabasusVsWalGPage() { running PostgreSQL, MySQL, MariaDB or MongoDB benefit from centralized backup management. +
  • + DBAs and disaster recovery: Physical + backups, WAL archiving and PITR for mission-critical systems + with near-zero data loss requirements. +
  • +
  • + DevOps engineers: Agent mode integrates + into existing infrastructure, while the web UI and API + provide visibility and control without custom scripting. +
  • WAL-G audience

    @@ -335,9 +358,9 @@ export default function DatabasusVsWalGPage() { integrate well.
  • - Users needing PITR: Those requiring - second-precise Point-in-Time Recovery for mission-critical - systems. + Extended database support: Teams needing + backup for MS SQL, FoundationDB or Greenplum alongside + PostgreSQL.
  • @@ -348,26 +371,33 @@ export default function DatabasusVsWalGPage() { with distinct advantages:

    -

    Databasus: Logical backups

    +

    + Databasus: Logical + Physical backups +

    - Databasus uses pg_dump for logical backups, - creating SQL representations of your data: + Databasus supports both logical and physical backup + strategies:

    @@ -410,21 +440,25 @@ export default function DatabasusVsWalGPage() { @@ -451,17 +485,15 @@ export default function DatabasusVsWalGPage() {

    - Note: For most - applications, restoring to the nearest hour or day (as - Databasus provides) is sufficient. Second-precise PITR is - typically only required for mission-critical financial or - transactional systems where every transaction must be - recoverable.{" "} + Note: Both + tools support PITR. WAL-G additionally offers delta restore + (fetching only changed pages) and uses a custom streaming + protocol for slightly better performance at scale.{" "} - Learn why Databasus doesn't support PITR → + Learn how Databasus supports PITR →

    @@ -804,8 +836,9 @@ export default function DatabasusVsWalGPage() { You want built-in scheduling without external cron setup
  • - Restoring to any hour or day meets your recovery - requirements + You want to manage backups for multiple databases from a + single dashboard with scheduling, notifications and team + features
  • You want quick setup with minimal database expertise
  • Built-in backup encryption is important to you
  • @@ -822,48 +855,39 @@ export default function DatabasusVsWalGPage() {

    - For comprehensive backup management, Databasus offers a more - streamlined experience with its unified interface and built-in - features — and works seamlessly with both self-hosted and - cloud-managed databases. Databasus is suitable for comprehensive - backup management of production databases, not just backups. + Both tools support physical backups, WAL archiving and PITR. + Databasus provides comprehensive backup management with its + web interface, team features and support for both logical and + physical backups — working seamlessly with both self-hosted + and cloud-managed databases.

    - WAL-G remains an excellent choice for organizations with - self-hosted databases who prefer CLI-based workflows and need - advanced features like delta backups and precise PITR, or for - teams building database platforms that need to provide PITR - capabilities to their customers. + WAL-G remains an excellent choice for teams that prefer + CLI-based workflows and need its unique advantages: delta + backups (changed pages only), a custom streaming protocol for + slightly better performance and support for additional + database engines beyond PostgreSQL.

    diff --git a/app/faq/page.tsx b/app/faq/page.tsx index d48e826..92b36cd 100644 --- a/app/faq/page.tsx +++ b/app/faq/page.tsx @@ -49,10 +49,10 @@ export default function FAQPage() { mainEntity: [ { "@type": "Question", - name: "Why does Databasus not use raw SQL dump format for PostgreSQL?", + name: "Why does Databasus not use raw SQL dump format for logical PostgreSQL backups?", acceptedAnswer: { "@type": "Answer", - text: "Databasus uses the custom format with zstd compression because it provides the most efficient backup and restore speed after extensive testing. The custom format with zstd compression level 5 offers the optimal balance between backup creation speed, restore speed and file size.", + text: "For logical backups, Databasus uses pg_dump's custom format with zstd compression because it provides the most efficient backup and restore speed after extensive testing. The custom format with zstd compression level 5 offers the optimal balance between backup creation speed, restore speed and file size.", }, }, { @@ -65,10 +65,10 @@ export default function FAQPage() { }, { "@type": "Question", - name: "Why doesn't Databasus support PITR (Point-in-Time Recovery)?", + name: "How does Databasus support PITR (Point-in-Time Recovery)?", acceptedAnswer: { "@type": "Answer", - text: "Databasus intentionally focuses on logical backups rather than PITR for several practical reasons: PITR tools typically need to be installed on the same server as your database; incremental backups cannot be restored without direct access to the database storage drive; managed cloud databases don't allow restoring external PITR backups; cloud providers already offer native PITR capabilities; and for 99% of projects, hourly or daily logical backups provide adequate recovery points without the operational complexity of WAL archiving.", + text: "Databasus supports PITR through the Databasus agent — a lightweight Go binary that runs alongside your PostgreSQL database. The agent continuously streams compressed WAL segments to Databasus and performs periodic physical backups via pg_basebackup. To restore, run the agent's restore command with a target timestamp — it downloads the full backup and WAL segments from Databasus, configures PostgreSQL recovery mode, and replays WAL to the exact target time. Suitable for disaster recovery with near-zero data loss, databases in closed networks and large databases where physical backups are faster than logical dumps.", }, }, { @@ -118,11 +118,13 @@ export default function FAQPage() {

    - Why does Databasus not use raw SQL dump format for PostgreSQL? + Why does Databasus not use raw SQL dump format for logical + PostgreSQL backups?

    - Databasus uses the pg_dump's{" "} + For logical backups, Databasus uses{" "} + pg_dump's{" "} custom format with{" "} zstd compression at level 5 instead of the plain SQL format because it provides the most efficient balance @@ -170,53 +172,95 @@ export default function FAQPage() { directory.

    -

    - Why doesn't Databasus support PITR (Point-in-Time - Recovery)? +

    + How does Databasus support PITR (Point-in-Time Recovery)?

    - Databasus intentionally focuses on logical backups rather than - PITR for several practical reasons: + Databasus supports PITR through the{" "} + Databasus agent — a lightweight Go binary that + runs alongside your PostgreSQL database. The agent connects + outbound to your Databasus instance, so the database never + needs to be exposed publicly.

    -
      -
    1. - Complex setup requirements — PITR tools - typically need to be installed on the same server as your - database, requiring direct filesystem access and careful - configuration -
    2. -
    3. - Restoration limitations — incremental backups - cannot be restored without direct access to the database - storage drive -
    4. -
    5. - Cloud incompatibility — managed cloud - databases (AWS RDS, Google Cloud SQL, Azure) don't allow - restoring external PITR backups, making them useless for - cloud-hosted PostgreSQL -
    6. -
    7. - Built-in cloud PITR — cloud providers already - offer native PITR capabilities and even they typically default - to hourly or daily granularity -
    8. -
    9. - Practical sufficiency — for 99% of projects, - hourly or daily logical backups provide adequate recovery - points without the operational complexity of WAL archiving -
    10. -
    -

    - So instead of second-by-second restoration complexity, Databasus - prioritizes an intuitive UX for individuals and teams, making it - the most reliable tool for managing multiple databases and day - to day use. + How backups work:

    + + +

    + How restoration works: +

    + + + +

    + Suitable for: +

    + + +

    How is AI used in Databasus development?

    diff --git a/app/installation/agent/page.tsx b/app/installation/agent/page.tsx new file mode 100644 index 0000000..d700187 --- /dev/null +++ b/app/installation/agent/page.tsx @@ -0,0 +1,688 @@ +import type { Metadata } from "next"; +import { CopyButton } from "../../components/CopyButton"; +import DocsNavbarComponent from "../../components/DocsNavbarComponent"; +import DocsSidebarComponent from "../../components/DocsSidebarComponent"; +import DocTableOfContentComponent from "../../components/DocTableOfContentComponent"; + +export const metadata: Metadata = { + title: "Agent Installation - Databasus Documentation", + description: + "Install the Databasus agent for physical backups, incremental backups, WAL archiving and Point-in-Time Recovery (PITR) of PostgreSQL databases.", + keywords: [ + "Databasus agent", + "PostgreSQL physical backup", + "WAL archiving", + "PITR", + "Point-in-Time Recovery", + "pg_basebackup", + "incremental backup", + "disaster recovery", + "PostgreSQL agent", + "database backup agent", + ], + openGraph: { + title: "Agent Installation - Databasus Documentation", + description: + "Install the Databasus agent for physical backups, incremental backups, WAL archiving and Point-in-Time Recovery (PITR) of PostgreSQL databases.", + type: "article", + url: "https://databasus.com/installation/agent", + }, + twitter: { + card: "summary", + title: "Agent Installation - Databasus Documentation", + description: + "Install the Databasus agent for physical backups, incremental backups, WAL archiving and Point-in-Time Recovery (PITR) of PostgreSQL databases.", + }, + alternates: { + canonical: "https://databasus.com/installation/agent", + }, + robots: "index, follow", +}; + +export default function AgentInstallationPage() { + const downloadCommand = `curl -L -o databasus-agent "/api/v1/system/agent?arch=" && chmod +x databasus-agent`; + + const postgresqlConf = `wal_level = replica +archive_mode = on +archive_command = 'cp %p /%f.tmp && mv /%f.tmp /%f'`; + + const postgresqlConfDocker = `wal_level = replica +archive_mode = on +archive_command = 'cp %p /wal-queue/%f.tmp && mv /wal-queue/%f.tmp /wal-queue/%f'`; + + const pgHbaEntry = `host replication all 127.0.0.1/32 md5`; + + const grantReplication = `ALTER ROLE WITH REPLICATION;`; + + const createWalDir = `mkdir -p /opt/databasus/wal-queue`; + + const walDirPermissions = `chown postgres:postgres /opt/databasus/wal-queue +chmod 755 /opt/databasus/wal-queue`; + + const dockerVolumeExample = `# In your docker run command: +docker run ... -v /opt/databasus/wal-queue:/wal-queue ... + +# Or in docker-compose.yml: +volumes: + - /opt/databasus/wal-queue:/wal-queue`; + + const dockerWalDirPermissions = `# Inside the container (or via docker exec): +chown postgres:postgres /wal-queue`; + + const startCommandHost = `./databasus-agent start \\ + --databasus-host= \\ + --db-id= \\ + --token= \\ + --pg-host=localhost \\ + --pg-port=5432 \\ + --pg-user= \\ + --pg-password= \\ + --pg-type=host \\ + --pg-wal-dir=/opt/databasus/wal-queue`; + + const startCommandFolder = `./databasus-agent start \\ + --databasus-host= \\ + --db-id= \\ + --token= \\ + --pg-host=localhost \\ + --pg-port=5432 \\ + --pg-user= \\ + --pg-password= \\ + --pg-type=host \\ + --pg-host-bin-dir= \\ + --pg-wal-dir=/opt/databasus/wal-queue`; + + const startCommandDocker = `./databasus-agent start \\ + --databasus-host= \\ + --db-id= \\ + --token= \\ + --pg-host=localhost \\ + --pg-port=5432 \\ + --pg-user= \\ + --pg-password= \\ + --pg-type=docker \\ + --pg-docker-container-name= \\ + --pg-wal-dir=/opt/databasus/wal-queue`; + + const restoreCommand = `./databasus-agent restore \\ + --databasus-host= \\ + --db-id= \\ + --token= \\ + --backup-id= \\ + --target-dir=`; + + const restoreCommandDocker = `./databasus-agent restore \\ + --databasus-host= \\ + --db-id= \\ + --token= \\ + --backup-id= \\ + --pg-type=docker \\ + --target-dir=`; + + const restoreCommandPitr = `./databasus-agent restore \\ + --databasus-host= \\ + --db-id= \\ + --token= \\ + --backup-id= \\ + --target-dir= \\ + --target-time=`; + + const archiveCommandCleanup = `# In /postgresql.auto.conf, remove or comment out: +# archive_mode = on +# archive_command = '...'`; + + return ( + <> + {/* JSON-LD Structured Data */} +