PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 02/05/2022 00:00:47

DoudouDKP
Membre

Installation de PostgreSQL sous MacOSX Error: invalid version 'initdb'

Bonjour,
je suis tout nouveau sur PostgreSQL.
Je souhaite écrire un script qui me permet d'installer PostgreSQL 14 sur Ubuntu et Mac OSX de manière automatique et créer une instance.
Seulement, j'obtiens un message d'erreur suivant sous Mac OSX : "Error: invalid version 'initdb'"
Ci-dessous mon script.
Pourriez vous me dire ce que j'ai loupé dans mon script ?
P.S : j'ai fait des recherches mais ne trouve rien pour m'aider.
Merci d'avance

Script d'installation et de paramétrage automatique :

#!/bin/bash

echo "Installation of PostGreSQL"

pg_version=14
instance_name="DataBase_Test"
username=Toto


# -----------------
# Functions Support
# -----------------
is_file_found(){
    [ -f "$1" ] && return $TRUE || return $FALSE
}


string_exists_in_file(){
    local line=$1
    local file=$2

    #if grep -Fxq "$line" $file
    #then
    #    # code if found
    #else
    #    # code if not found
    #fi



    case `grep -Fx "$line" $file >/dev/null; echo $?` in
      0)
        # code if found
        ;;
      1)
        # code if not found
        echo $line >> $file
        ;;
      *)
        # code if an error occurred
        echo $line " cannot be added to the file " $file
        ;;
    esac

}


pghba_file_add() {
    local bdd_name=$2
    local user_name=$3
    local network_id=$4
    local file=$6

    # Default value assignement
    if [ -z "$1" ]
    then
        local connexion_type="local"
    else
        local connexion_type=$1
    fi


    if [ -z "$5" ]
    then
        local auth_metho="scram-sha-256"
    else
        local auth_metho=$5
    fi

    # Update the pg_hba file
    if ! [[ -z "$1" && -z "$2" && -z "$3" && -z "$4" && -z "$5" && -z "$6" ]]
    then
        string_exists_in_file "$connexion_type $bdd_name $user_name $ $network_id $auth_metho" $file
    fi
}



# ---------------------
# Uninstall PostGre SQL
# ---------------------
#which -s psql
#if [ $? -eq 0 ]; then
#    # PostGres is installed
#    pg_dropcluster --stop $pg_version $instance_name
#    if [[ "$OSTYPE" == "linux-gnu"* ]]; then
#        echo 'Your computer is running under : Linux'
#        sudo apt-get --purge remove postgresql postgresql-doc postgresql-common postgresql-contrib
#    elif [[ $OSTYPE == 'darwin'* ]]; then
#        echo 'Your computer is running under : macOS'
#        #brew remove postgresql postgresql-doc postgresql-common postgresql-contrib
#        brew remove postgresql
#        brew remove petere/postgresql/postgresql@$pg_version
#        brew uninstall postgres
#    fi
#else
#    # PostGres is not installed
#    :
#fi



# ---------------------------------
# Install PostGre SQL avec HomeBrew
# ---------------------------------

if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    # Import the GPG repository key with the commands
    sudo apt-get install wget ca-certificates
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

    # Add the PostgreSQL repository by typing
    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ 'lsb_release -cs'-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

    # Update the Package List
    sudo apt-get update

    # Install PostgreSQL
    sudo apt-get -y install postgresql postgresql-contrib postgresql-client

    # Change Startup settings
    sudo systemctl enable postgresql

    # Restart PostgreSQL
    sudo systemctl restart postgresql

    # Check PostgreSQL Port Usage
    ss -nlt

    # Adjust Firewall Settings
    sudo ufw allow from any to any port 5432 proto tcp


elif [[ $OSTYPE == 'darwin'* ]]; then
    # Update brew
    brew upgrade
    brew update
    brew doctor
    brew install postgresql
    #brew install petere/postgresql/postgresql-common
    #brew search petere/postgresql
    #brew install petere/postgresql/postgresql@$pg_version

    # Perl installation
    sudo xcode-select --switch /Applications/Xcode.app/
    # Launch PostgreSQL
    #brew services start postgresql
    # Link PostGreSQL
    brew link --overwrite postgresql
fi

# ---------------------
# Configure PostGre SQL
# ---------------------

# Define the Directory where the database are stored
read -p "Enter the database directory path: " dbpath
dbpath=${dbpath:-~/postgres/$pg_version/$instance_name}
echo "Repertoire de stockage de la base de données ${dbpath}"

if ! [[ -z "$dbpath" && -d "$dbpath" ]]; then
    mkdir -p $dbpath
    dbpath_parentdir="$(dirname "$dbpath")"
    #chown -R postgres:postgres $dbpath_parentdir
    chown -R Toto $dbpath_parentdir
    chmod -R 700 $dbpath_parentdir
fi

# Initialisation d'une instance
#initdb -A md5 -E UTF8 -locale=fr_BE -D $dbpath -X $dbpath_parentdir/wals
#pg_createcluster -p 5432 -l "$dbpath_parentdir/postgres-$pg_version" -e UTF8 -locale=fr_BE -d $dbpath -A md5 -X $dbpath_parentdir/wals
#pg_createcluster -p 5432 -l "$dbpath_parentdir/$instance_name" -u $username -e UTF8 -locale=fr_BE -d $dbpath -- initdb -A md5 -X $dbpath_parentdir/wals
pg_createcluster -p 5442 -l "$dbpath_parentdir/$instance_name" -u $username -e UTF-8 --locale=fr_BE -d $dbpath -- initdb -A -X $dbpath_parentdir/wals

# Server Start
#pg_ctl -D (basename {$dbpath}) -l journaltrace start
#pg_ctl -D "$dbpath_parentdir/postgres-$pg_version" -l "$dbpath_parentdir/postgres-$pg_version/server.log" start
pg_ctl -D "$dbpath_parentdir/$instance_name" -l "$dbpath_parentdir/server_$instance_name.log" start

# List instance On-Going
pg_lsclusters


# -----------------------------
# Gestion des Connexions Server
# -----------------------------
session_file="pg_hba.conf"
pg_hba_path="$dbpath_parentdir/$session_file"
# let us call our function
is_file_found $pg_hba_path

# take action based upon return value
if [ $? -eq 0 ]; then
    :
else
    cat > $pg_hba_path
fi
pghba_file_add "local" $instance_name "postgres" "" "scram-sha-256" $pg_hba_path
pghba_file_add "host" $instance_name "postgres" "0.0.0.0/O" "scram-sha-256" $pg_hba_path


# ---------------------
# Start PostGre SQL
# ---------------------
pg_ctlcluster $pg_version $instance_name start

Hors ligne

#2 02/05/2022 09:26:54

ruizsebastien
Membre

Re : Installation de PostgreSQL sous MacOSX Error: invalid version 'initdb'

Bonjour,

Lorsque vous faites :
    brew install postgresql

   

Il faudrait lancer la commande avec un search (équivalent de yum search. Je ne connais pas brew) et voir quelle version de postgresql il choisit selon le repo installé sur la machine.

Parce qu'ensuite l'initdb se lance sans doute avec la version valorisée par dbpath + pg_version qui ne correspond pas à la version installée en vrai.

peut être devriez vous lancer l'installation avec : brew install petere/postgresql/postgresql@$pg_version
(mais encore une fois, je ne connais pas brew, mais c'est une piste)


Cordialement,

Sébastien.

Hors ligne

#3 02/05/2022 20:17:11

dverite
Membre

Re : Installation de PostgreSQL sous MacOSX Error: invalid version 'initdb'

Je n'ai jamais essayé pg_createcluster sur Mac OS (qui est un projet perso de Peter Eisentraut si je comprends bien) , mais si c'est pareil que celui utilisé par les packages Debian, cette ligne de commande a un problème:

pg_createcluster -p 5442 -l "$dbpath_parentdir/$instance_name" -u $username -e UTF-8 --locale=fr_BE -d $dbpath -- initdb -A -X $dbpath_parentdir/wals

Le souci est que derrière le -- il ne doit pas y avoir le mot initdb. Dans la doc il est dit "initdb options", mais c'est à interpréter comme "les options destinées à initdb", et non pas comme "le mot initdb suivi d'une liste d'options".

Ce qui n'empêche pas que la valeur du $dbpath n'est peut-être pas bonne par ailleurs, comme Sébastien le suggère.

Hors ligne

#4 04/05/2022 14:39:55

yohmartin
Membre

Re : Installation de PostgreSQL sous MacOSX Error: invalid version 'initdb'

il me semble qu'il y a un espace entre les 2 -- et le initdb, ca ne pas poser un souci ?

Hors ligne

#5 05/05/2022 22:18:32

DoudouDKP
Membre

Re : Installation de PostgreSQL sous MacOSX Error: invalid version 'initdb'

Suite à vos différent message, voici ce que j'ai essayé malheureusement sans succès.
Après de nouvelles recherches, il semblerait que pg_createcluster ne fonctionne pas sous Ubuntu.
cf. https://www.reddit.com/r/PostgreSQL/com … vs_initdb/
Je vais donc tester sans pg_createcluster mais à la place initdb.
Merci à vous

Hors ligne

Pied de page des forums