errupdate() { if [ $DB_RENAMED -eq 1 ]; then psql -U postgres -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname LIKE 'catalog%';" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d postgres -c "DROP DATABASE IF EXISTS catalog;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname LIKE 'catalog%'; ALTER DATABASE catalog_bkp RENAME TO catalog;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 echo "Renaiming catalog_bkp to catalog" echo "Renaiming catalog_bkp to catalog" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 cash restart > /dev/null 2>&1 fi echo echo echo "*** CATALOG CLONE FAILED ***" echo "*** Reason: $1 ***" echo "*** CATALOG CLONE FAILED ***" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 echo "*** Reason: $1 ***" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 exit 1 } echo -n "Введите IP-адрес кассы для переноса товарного справочника:" read cashIP rm -rf /home/tc/storage/catalog_log/*.* rm -rf /home/tc/storage/catalog_log rm -rf /home/tc/storage/catalog.backup mkdir /home/tc/storage/catalog_log || errupdate "Cannot create dir /home/tc/storage/catalog_log" echo Starting clone catalog DB: `date` > /home/tc/storage/catalog_log/saving_settings.log 2>&1 PGPASSWORD=postgres export PGPASSWORD DB_RENAMED=0 # dump pg_dump -h $cashIP -p 5432 --username postgres --format custom --blobs --verbose catalog --file "/home/tc/storage/catalog.backup" > /home/tc/storage/catalog_log/catalog_db_backup.log 2>&1 || errupdate "pg_dump error" # saving data from cash_menu and sales_management_properties into DB postgres psql -U postgres -d postgres -c "CREATE EXTENSION IF NOT EXISTS dblink;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Create dblink error in postgres DB" psql -U postgres -d catalog -h $cashIP -c "CREATE EXTENSION IF NOT EXISTS dblink;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Create dblink error in catalog DB on etalon cash" psql -U postgres -d postgres -c "DROP TABLE IF EXISTS cash_menu_bkp;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Drop cash_menu_bkp error" psql -U postgres -d postgres -c "DROP TABLE IF EXISTS sales_management_properties_bkp;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Drop sales_management_properties_bkp error" psql -U postgres -d postgres -c "SELECT q.* INTO cash_menu_bkp from dblink('dbname=catalog port=5432 user=postgres password=$PGPASSWORD'::text,'SELECT id, number, cash_type, xmlcontent, content_data, content_info, time_from, time_to, date_from, date_to, day_of_week, guid, deleted, has_priority FROM cash_menu;'::text) q (id bigint, number int, cash_type text, xmlcontent text, content_data text, content_info text, time_from time without time zone, time_to time without time zone, date_from date, date_to date, day_of_week int, guid text, deleted boolean, has_priority boolean);" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Copy cash_menu_bkp to postgres error" psql -U postgres -d postgres -c "SELECT q.* INTO sales_management_properties_bkp from dblink('dbname=catalog port=5432 user=postgres password=$PGPASSWORD'::text,'SELECT module_name, plugin_name, property_key, property_value, description, transport_level, priority, send_status FROM sales_management_properties;'::text) q (module_name text, plugin_name text, property_key text, property_value text, description text, transport_level int, priority int, send_status int);" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Copy sales_management_properties_bkp to postgres error" echo Current counts of tables before clone >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) sales_management_properties from sales_management_properties;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) cash_menu from cash_menu;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 # cash stop cash stop > /dev/null 2>&1 sudo killall java > /dev/null 2>&1 psql -U postgres -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'catalog_bkp'" > /home/tc/storage/catalog_log/drop_connections.log 2>&1 psql -U postgres -d postgres -c "DROP DATABASE IF EXISTS catalog_bkp;" >> /home/tc/storage/catalog_log/drop_connections.log 2>&1 psql -U postgres -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname LIKE 'catalog%'; ALTER DATABASE catalog RENAME TO catalog_bkp;" >> /home/tc/storage/catalog_log/drop_connections.log 2>&1 || errupdate "Can not rename catalog to catalog_bkp" DB_RENAMED=1 psql -U postgres -d postgres -c "CREATE DATABASE catalog;" >> /home/tc/storage/catalog_log/drop_connections.log 2>&1 || errupdate "Can not create catalog DB" pg_restore --host localhost --port 5432 --username postgres --dbname=catalog --verbose < /home/tc/storage/catalog.backup 2> /home/tc/storage/catalog_log/catalog_db_restore.log || errupdate "Restoring catalog DB error" psql -U postgres -d catalog -c "CREATE LANGUAGE plpgsql" >> /home/tc/storage/catalog_log/plpsql.log 2>&1 # DBlink catalog psql -U postgres -d catalog -c "CREATE EXTENSION IF NOT EXISTS dblink;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Create dblink error in catalog DB" # restoring data into cash_menu and sales_management_properties from DB postgres psql -U postgres -d catalog -c "TRUNCATE cash_menu;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Truncate cash_menu error" psql -U postgres -d catalog -c "INSERT INTO cash_menu SELECT q.* from dblink('dbname=postgres port=5432 user=postgres password=$PGPASSWORD'::text,'SELECT id, number, cash_type, xmlcontent, content_data, content_info, time_from, time_to, date_from, date_to, day_of_week, guid, deleted, has_priority FROM cash_menu_bkp;'::text) q (id bigint, number int, cash_type text, xmlcontent text, content_data text, content_info text, time_from time without time zone, time_to time without time zone, date_from date, date_to date, day_of_week int, guid text, deleted boolean, has_priority boolean);" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Copy cash_menu to catalog error" psql -U postgres -d catalog -c "TRUNCATE sales_management_properties;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Truncate sales_management_properties error" psql -U postgres -d catalog -c "INSERT INTO sales_management_properties(module_name, plugin_name, property_key, property_value, description, transport_level, priority, send_status) SELECT q.* from dblink('dbname=postgres port=5432 user=postgres password=$PGPASSWORD'::text,'SELECT module_name, plugin_name, property_key, property_value, description, transport_level, priority, send_status FROM sales_management_properties_bkp;'::text) q (module_name text, plugin_name text, property_key text, property_value text, description text, transport_level int, priority int, send_status int);" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 || errupdate "Copy sales_management_properties to catalog error" psql -U postgres -d catalog -c "UPDATE cg_lastproductsid SET id=1, productid=0" >> /home/tc/storage/catalog_log/lastid_reset.log 2>&1 cash restart > /dev/null 2>&1 psql -U postgres -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'catalog_bkp'" > /home/tc/storage/catalog_log/drop_connections.log 2>&1 psql -U postgres -d postgres -c "DROP DATABASE IF EXISTS catalog_bkp;" >> /home/tc/storage/catalog_log/drop_connections.log 2>&1 echo Current counts of tables after clone >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) sales_management_properties from sales_management_properties;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) cash_menu from cash_menu;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 echo other tables after clone >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) cg_price from cg_price;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) cg_product from cg_product;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) cg_barcode from cg_barcode;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) loy_cg_sale_restrictions from loy_cg_sale_restrictions;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 psql -U postgres -d catalog -c "select count(*) loy_products_group from loy_products_group;" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 echo "DONE" >> /home/tc/storage/catalog_log/saving_settings.log 2>&1 echo "DONE"