You just need to copy this script anywhere on the server where you have the database that you want to use as a template. Then edit the script and change the database name 'ledger28' to your database name and run the script from command line like this:

  perl generate_chart_file.pl

It will create the required chart file in the current folder which you can then move into your sql-ledger/sql folder.

This script creates INSERT statements for the 3 tables chart, curr, defaults, but you can add or remove tables from this list as needed by editing the script. And the current output file is set in “$output_file = 'RMADE_DEU_Basiskontenplan-chart.sql';”, which you can also adapt according to your own needs.

#!/usr/bin/perl

use strict;
use warnings;
use DBI;

my $db_name = 'ledger28';
my $db_host = 'localhost';
my $db_user = 'sql-ledger';
my $db_pass = '';

my $dbh = DBI->connect(
  "dbi:Pg:dbname=$db_name;host=$db_host",
  $db_user, $db_pass,
  {
      RaiseError => 1,
      PrintError => 0,
  }
);

my $output_file = 'RMADE_DEU_Basiskontenplan-chart.sql';
open( my $output_fh, '>', $output_file ) or die "Could not open $output_file: $!";

my @tables = ( 'chart', 'curr', 'defaults' );

foreach my $table (@tables) {
  my $stmt = $dbh->prepare("SELECT * FROM $table");
  $stmt->execute();

  my @columns;
  for my $col_info ( @{ $stmt->{NAME_lc} } ) {
      push @columns, $col_info unless $col_info eq 'id';
  }

  while ( my $row = $stmt->fetchrow_hashref() ) {
      my @values      = map { defined $row->{$_} ? "'$row->{$_}'" : 'NULL' } @columns;
      my $columns_str = join( ', ', @columns );
      my $values_str  = join( ', ', @values );
      my $insert_sql  = "INSERT INTO $table ($columns_str) VALUES ($values_str);";
      print $output_fh "$insert_sql\n";
  }
}

close $output_fh;

$dbh->disconnect;

print "SQL statements generated and saved to $output_file\n";