]> git.openstreetmap.org Git - nominatim.git/blob - utils/check_import_finished.php
switch all utils to initialising dotenv
[nominatim.git] / utils / check_import_finished.php
1 <?php
2
3 require_once(CONST_LibDir.'/init-cmd.php');
4
5 loadSettings(getcwd());
6
7 $term_colors = array(
8                 'green' => "\033[92m",
9                 'red' => "\x1B[31m",
10                 'normal' => "\033[0m"
11 );
12
13 $print_success = function ($message = 'OK') use ($term_colors) {
14     echo $term_colors['green'].$message.$term_colors['normal']."\n";
15 };
16
17 $print_fail = function ($message = 'Failed') use ($term_colors) {
18     echo $term_colors['red'].$message.$term_colors['normal']."\n";
19 };
20
21
22 $oDB = new Nominatim\DB;
23
24
25 function isReverseOnlyInstallation()
26 {
27     global $oDB;
28     return !$oDB->tableExists('search_name');
29 }
30
31
32 echo 'Checking database got created ... ';
33 if ($oDB->checkConnection()) {
34     $print_success();
35 } else {
36     $print_fail();
37     echo <<< END
38     Hints:
39     * Is the database server started?
40     * Check the NOMINATIM_DATABASE_DSN variable in your local .env
41     * Try connecting to the database with the same settings
42
43 END;
44     exit(1);
45 }
46
47
48 echo 'Checking nominatim.so module installed ... ';
49 $sStandardWord = $oDB->getOne("SELECT make_standard_name('a')");
50 if ($sStandardWord === 'a') {
51     $print_success();
52 } else {
53     $print_fail();
54     echo <<< END
55     The Postgresql extension nominatim.so was not found in the database.
56     Hints:
57     * Check the output of the CMmake/make installation step
58     * Does nominatim.so exist?
59     * Does nominatim.so exist on the database server?
60     * Can nominatim.so be accessed by the database user?
61
62 END;
63     exit(1);
64 }
65
66 echo 'Checking place table ... ';
67 if ($oDB->tableExists('place')) {
68     $print_success();
69 } else {
70     $print_fail();
71     echo <<< END
72     * The import didn't finish.
73     Hints:
74     * Check the output of the utils/setup.php you ran.
75     Usually the osm2pgsql step failed. Check for errors related to
76     * the file you imported not containing any places
77     * harddrive full
78     * out of memory (RAM)
79     * osm2pgsql killed by other scripts, for consuming to much memory
80
81 END;
82     exit(1);
83 }
84
85
86
87 echo 'Checking indexing status ... ';
88 $iUnindexed = $oDB->getOne('SELECT count(*) FROM placex WHERE indexed_status > 0');
89 if ($iUnindexed == 0) {
90     $print_success();
91 } else {
92     $print_fail();
93     echo <<< END
94     The indexing didn't finish. There is still $iUnindexed places. See the
95     question 'Can a stopped/killed import process be resumed?' in the
96     troubleshooting guide.
97
98 END;
99     exit(1);
100 }
101
102 echo "Search index creation\n";
103 $aExpectedIndices = array(
104     // sql/indices.src.sql
105     'idx_word_word_id',
106     'idx_place_addressline_address_place_id',
107     'idx_placex_rank_search',
108     'idx_placex_rank_address',
109     'idx_placex_pendingsector',
110     'idx_placex_parent_place_id',
111     'idx_placex_geometry_reverse_lookuppolygon',
112     'idx_placex_geometry_reverse_placenode',
113     'idx_location_area_country_place_id',
114     'idx_osmline_parent_place_id',
115     'idx_osmline_parent_osm_id',
116     'idx_place_osm_unique',
117     'idx_postcode_id',
118     'idx_postcode_postcode'
119 );
120 if (!isReverseOnlyInstallation()) {
121     $aExpectedIndices = array_merge($aExpectedIndices, array(
122         // sql/indices_search.src.sql
123         'idx_search_name_nameaddress_vector',
124         'idx_search_name_name_vector',
125         'idx_search_name_centroid'
126     ));
127 }
128
129 foreach ($aExpectedIndices as $sExpectedIndex) {
130     echo "Checking index $sExpectedIndex ... ";
131     if ($oDB->indexExists($sExpectedIndex)) {
132         $print_success();
133     } else {
134         $print_fail();
135         echo <<< END
136         Hints:
137         * Run './utils/setup.php --create-search-indices --ignore-errors' to
138           create missing indices.
139
140 END;
141         exit(1);
142     }
143 }
144
145 echo 'Checking search indices are valid ... ';
146 $sSQL = <<< END
147     SELECT relname
148     FROM pg_class, pg_index
149     WHERE pg_index.indisvalid = false
150       AND pg_index.indexrelid = pg_class.oid;
151 END;
152 $aInvalid = $oDB->getCol($sSQL);
153 if (empty($aInvalid)) {
154     $print_success();
155 } else {
156     $print_fail();
157     echo <<< END
158     At least one index is invalid. That can happen, e.g. when index creation was
159     disrupted and later restarted. You should delete the affected indices and
160     run the index stage of setup again.
161     See the question 'Can a stopped/killed import process be resumed?' in the
162     troubleshooting guide.
163     Affected indices: 
164 END;
165     echo join(', ', $aInvalid) . "\n";
166     exit(1);
167 }
168
169
170
171 if (getSettingBool('USE_US_TIGER_DATA')) {
172     echo 'Checking TIGER table exists ... ';
173     if ($oDB->tableExists('location_property_tiger')) {
174         $print_success();
175     } else {
176         $print_fail();
177         echo <<< END
178         Table 'location_property_tiger' does not exist. Run the TIGER data
179         import again.
180
181 END;
182         exit(1);
183     }
184 }
185
186
187
188
189 exit(0);