-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmigrate.php
More file actions
78 lines (62 loc) · 2.5 KB
/
Copy pathmigrate.php
File metadata and controls
78 lines (62 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
if (PHP_SAPI !== 'cli') {
die('Access denied');
}
require_once 'init.php';
$env = new EnvManager('.env');
$db_host = $env->get('MAIN_DATABASE_HOST');
$db_user = $env->get('MAIN_DATABASE_USER');
$db_pass = $env->get('MAIN_DATABASE_USER_PASS');
$dbname = $env->get('MAIN_DATABASE_NAME');
try {
$conn = new PDO("pgsql:host=$db_host;dbname=postgres", $db_user, $db_pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT 1 FROM pg_database WHERE datname = :dbname");
$stmt->execute([':dbname' => $dbname]);
$result = $stmt->fetch();
if (!empty($result)) {
$answer = readline("Database {$dbname} already exists. Drop and recreate? (Y/N): ");
$answer = strtolower(trim($answer));
if ($answer === 'y' || $answer === 'yes') {
// encerra conexões ativas
$stmt = $conn->prepare("
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = :dbname AND pid <> pg_backend_pid()
");
$stmt->execute([':dbname' => $dbname]);
$conn->exec("DROP DATABASE IF EXISTS {$dbname}");
echo "Database {$dbname} dropped.\n";
$conn->exec("CREATE DATABASE {$dbname} WITH ENCODING 'UTF8' TEMPLATE template1");
echo "Database {$dbname} created!\n";
} else {
echo "Keeping existing database.\n";
}
} else {
$conn->exec("CREATE DATABASE {$dbname} WITH ENCODING 'UTF8' TEMPLATE template1");
echo "Database {$dbname} created!\n";
}
// conecta no banco recém-criado
$conn = null;
$conn = new PDO("pgsql:host=$db_host;dbname={$dbname}", $db_user, $db_pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// pega todos os arquivos SQL que tenham 'pgsql' no nome
$sqlFiles = glob('app/database/builder/*pgsql*.sql');
if (empty($sqlFiles)) {
echo "No SQL files found.\n";
exit;
}
// junta todos os arquivos em um único SQL
$fullSql = "";
foreach ($sqlFiles as $file) {
echo "Reading {$file}...\n";
$fullSql .= file_get_contents($file) . "\n";
}
// roda tudo de uma vez com session_replication_role
$conn->exec("SET session_replication_role = replica;");
$conn->exec($fullSql);
$conn->exec("SET session_replication_role = origin;");
echo "All SQL files imported successfully!\n";
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
}