Вопрос или проблема
На базе данных 16.3 я экспортировал таблицу с партиционированием через pg_dump
. Затем на новой базе данных 16.3 я хотел восстановить эту таблицу через pg_restore
. Но это не сработало, сообщение об ошибке от pg_restore
выглядит следующим образом:
pg_restore: ошибка: не удалось выполнить запрос: ОШИБКА: строка слишком велика: размер 9000, максимальный размер 8160
Команда была: ALTER TABLE ONLY schemaname_removed.tablename_removed ATTACH PARTITION schemaname_removed.tablename_removed_p21m FOR VALUES IN (21, 28, 29, 30, 31, 39, 40, 41, 42, 43, 44, 68, 332, 333, 343, 344, 345, 346, 347, 348, 349, 350, 467, 603, 611, 612, 613, 614, 615, 616, 617, 618, 619, 630, 634, 637, 639, 645, 646, 647, 899, 912, 913, 915, 941, 946, 949, 956, 957, 958, 960, 961, 962, 963, 1026, 1114, 1116, 1138, 1162, 1163, 1187, 1223, 1225, 1359, 1360, 1374, 1391, 1392, 1393, 1405, 1406, 1413, 1741, 1753, 1800, 1801, 1808, 1809, 1841, 1889, 1921, 1941, 1942, 1970, 1971, 1972, 1997, 1999, 2002, 2003, 2008, 2015, 2016, 2019, 2020, 2022, 2023, 2024, 2042, 2043, 2066, 2070, 2076, 2080, 2081, 2129, 2130, 2131, 2132, 2134, 2174, 2197, 2198, 2199, 2200, 2203, 2204, 2205, 2211, 2212, 2213, 2214, 2237, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2312, 2313, 2318, 2319, 2320, 2321, 2322, 2323, 2325, 2326, 2327, 2333, 2334, 2335, 2336, 2346, 2347, 2365, 2371, 2372, 2384, 2385, 2442, 2463, 2464, 2465, 2466, 2492, 2493, 2500, 2501, 2502, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2520, 2535, 2536, 2545, 2563, 2564, 2585, 2586, 2587, 2588, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2668, 2692, 2697, 2698, 2699, 2701, 2702, 2703, 2715, 2730, 2773, 2774, 2783, 2784, 2785, 2786, 2805, 2806, 2812, 2813, 2814, 2815, 2827, 2828, 2832, 2833, 2856, 2887, 2970, 2972, 2973, 2974, 2982, 2986, 2988, 2990, 3029, 3031, 3032, 3058, 3059, 3075, 3076, 3079, 3080, 3081, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3176, 3180, 3185, 3187, 3188, 3190, 3191, 3194, 3198, 3199, 3200, 3201, 3206, 3214, 3215, 3281, 3353, 3373, 3402, 3403, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3431, 3478, 3479, 3480, 3481, 3497, 3498, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3593, 3594, 3595, 3596, 3665, 3666, 3704, 3705, 3706, 3707, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3788, 3796, 3800, 3801, 3804, 3805, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3956, 3964, 3965, 3969, 3972, 3973, 4021, 4083, 4085, 4086, 4090, 4093, 4096, 4098, 4099, 4100, 4103, 4104, 4119, 4122, 4123, 4129, 4130, 4144, 4184, 4185, 4192, 4194, 4195, 4196, 4197, 4199, 4200, 4201, 4225, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4412, 4421, 4423, 4424, 4426, 4429, 4430, 4431, 4432, 4499, 4502, 4555, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4587, 4605, 4606, 4607, 4610, 4612, 4614, 4615, 4636, 4637, 4638, 4652, 4653, 4701, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4866, 4869, 4872, 4873, 4876, 4877, 4878, 4879, 4883, 4884, 4891, 4892, 4919, 5002, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5024, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5065, 5073, 5074, 5076, 5077, 5078, 5082, 5085, 5086, 5087, 5182, 5231, 5232, 5264, 5265, 5266, 5267, 5496, 5497, 5502, 5511, 5512, 5513, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5574, 5575, 5628, 5636, 5637, 5638, 5640, 5646, 5648, 5649, 5650, 5651, 5692, 5696, 5703, 5707, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5781, 5805, 5808, 5810, 5811, 5814, 5816, 5820, 5823, 5824, 5825, 5828, 5833, 5834, 5852, 5853, 5855, 5865, 5866, 5867, 5868, 5910, 5913, 5914, 5938, 5959, 5964, 5975, 5978, 6021, 6022, 6023, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6046, 6094, 6099, 6100, 6105, 6109, 6111, 6113, 6114, 6115, 6116, 6152, 6153, 6158, 6159, 6160, 6161, 6162, 6163, 6164, 6165, 6166, 6174, 6243, 6324, 6325, 6415, 6416, 6527, 6533, 6534, 6539, 6543, 6544, 6545, 6546, 6547, 6559, 6581, 6582, 6583, 6584, 6631, 6632, 6666, 6667, 6668, 6669, 6671, 6672, 6673, 6674, 6675, 6676, 6681, 6690, 6692, 6693, 6694, 6797, 6798, 6799, 6899, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6954, 6959, 6960, 6964, 6970, 6971, 7246, 7247, 7248, 7250, 7251, 7252, 7253, 7254, 7255, 7256, 7257, 7258, 7269, 7272, 7273, 7275, 7276, 7504, 7505, 7506, 7507, 7508, 7509, 7510, 7511, 7512, 7513, 7514, 7519, 7529, 7533, 7534, 7535, 7536, 7559, 7658, 7661, 7665, 7668, 7669, 7673, 7676, 7677, 7678, 7682, 7684, 7716, 7762, 7776, 7779, 7828, 7829, 7845, 7852, 7882, 7885, 7887, 7891, 7893, 7895, 7897, 7901, 7903, 7904, 7940, 7941, 7942, 7943, 8098, 8099, 8131, 8134, 8138, 8141, 8143, 8149, 8150, 8151, 8152, 8153, 8155, 8156, 8157, 8158, 8222, 8241, 8327, 8328, 8465, 8466, 8467, 8470, 8473, 8474, 8475, 8476, 8477, 8484, 8487, 8488, 8556, 8910, 8914, 8916, 8921, 8923, 8924, 8925, 8926, 8929, 8932, 8933, 8934, 8936, 8937, 8938, 8939, 9311, 9383, 9385, 9388, 9389, 9391, 9394, 9395, 9396, 9399, 9400, 9401, 9402, 9403, 9405, 9406);
Вот пример того, как я изначально создавал эти список партиций (на 14.10, до обновления этой базы данных до 16.3, если это имеет значение):
ALTER TABLE schemaname_removed.tablename_removed ATTACH PARTITION schemaname_removed.tablename_removed_p49M FOR VALUES IN (49,50,51,159,301,313,336,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,398,422,437,447,470,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,686,691,704,729,766,792,827,867,943,950,1099,1202,1306,1371,1447,1528,1664,2142,2267,2370,2469,2584,2711,2851,2972,3070,3227,3582,3715,3902,4019,4169,4313,4429,4538,4706,4842,4980,5115,5253,5397,5802,5928,6063,6219,6337,6450,6654,6781,6904);
Интересно, что я не использовал пробелы после запятых: 49,50,51…, но pg_restore делает это: 21, 28, 29…
Но даже когда я вручную пытаюсь выполнить место, где pg_restore
ошибается и убираю пробелы, все равно возникает ошибка ‘строка слишком велика’. Вы можете увидеть, что разница уменьшается, но все равно не работает:
-- (1) пробелы, как написано pg_restore:
ALTER TABLE ONLY schemaname_removed.tablename_removed ATTACH PARTITION schemaname_removed.tablename_removed_p21m FOR VALUES IN (21, 28, 29, 30, 31, 39, 40, 41, 42, 43, 44, 68, 332, 333, 343, 344, 345, 346, 347, 348, 349, 350, 467, 603, 611, 612, 613, 614, 615, 616, 617, 618, 619, 630, 634, 637, 639, 645, 646, 647, 899, 912, 913, 915, 941, 946, 949, 956, 957, 958, 960, 961, 962, 963, 1026, 1114, 1116, 1138, 1162, 1163, 1187, 1223, 1225, 1359, 1360, 1374, 1391, 1392, 1393, 1405, 1406, 1413, 1741, 1753, 1800, 1801, 1808, 1809, 1841, 1889, 1921, 1941, 1942, 1970, 1971, 1972, 1997, 1999, 2002, 2003, 2008, 2015, 2016, 2019, 2020, 2022, 2023, 2024, 2042, 2043, 2066, 2070, 2076, 2080, 2081, 2129, 2130, 2131, 2132, 2134, 2174, 2197, 2198, 2199, 2200, 2203, 2204, 2205, 2211, 2212, 2213, 2214, 2237, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2312, 2313, 2318, 2319, 2320, 2321, 2322, 2323, 2325, 2326, 2327, 2333, 2334, 2335, 2336, 2346, 2347, 2365, 2371, 2372, 2384, 2385, 2442, 2463, 2464, 2465, 2466, 2492, 2493, 2500, 2501, 2502, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2520, 2535, 2536, 2545, 2563, 2564, 2585, 2586, 2587, 2588, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2668, 2692, 2697, 2698, 2699, 2701, 2702, 2703, 2715, 2730, 2773, 2774, 2783, 2784, 2785, 2786, 2805, 2806, 2812, 2813, 2814, 2815, 2827, 2828, 2832, 2833, 2856, 2887, 2970, 2972, 2973, 2974, 2982, 2986, 2988, 2990, 3029, 3031, 3032, 3058, 3059, 3075, 3076, 3079, 3080, 3081, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3176, 3180, 3185, 3187, 3188, 3190, 3191, 3194, 3198, 3199, 3200, 3201, 3206, 3214, 3215, 3281, 3353, 3373, 3402, 3403, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3431, 3478, 3479, 3480, 3481, 3497, 3498, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3593, 3594, 3595, 3596, 3665, 3666, 3704, 3705, 3706, 3707, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3788, 3796, 3800, 3801, 3804, 3805, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3956, 3964, 3965, 3969, 3972, 3973, 4021, 4083, 4085, 4086, 4090, 4093, 4096, 4098, 4099, 4100, 4103, 4104, 4119, 4122, 4123, 4129, 4130, 4144, 4184, 4185, 4192, 4194, 4195, 4196, 4197, 4199, 4200, 4201, 4225, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4412, 4421, 4423, 4424, 4426, 4429, 4430, 4431, 4432, 4499, 4502, 4555, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4587, 4605, 4606, 4607, 4610, 4612, 4614, 4615, 4636, 4637, 4638, 4652, 4653, 4701, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4866, 4869, 4872, 4873, 4876, 4877, 4878, 4879, 4883, 4884, 4891, 4892, 4919, 5002, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5024, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5065, 5073, 5074, 5076, 5077, 5078, 5082, 5085, 5086, 5087, 5182, 5231, 5232, 5264, 5265, 5266, 5267, 5496, 5497, 5502, 5511, 5512, 5513, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5574, 5575, 5628, 5636, 5637, 5638, 5640, 5646, 5648, 5649, 5650, 5651, 5692, 5696, 5703, 5707, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5781, 5805, 5808, 5810, 5811, 5814, 5816, 5820, 5823, 5824, 5825, 5828, 5833, 5834, 5852, 5853, 5855, 5865, 5866, 5867, 5868, 5910, 5913, 5914, 5938, 5959, 5964, 5975, 5978, 6021, 6022, 6023, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6046, 6094, 6099, 6100, 6105, 6109, 6111, 6113, 6114, 6115, 6116, 6152, 6153, 6158, 6159, 6160, 6161, 6162, 6163, 6164, 6165, 6166, 6174, 6243, 6324, 6325, 6415, 6416, 6527, 6533, 6534, 6539, 6543, 6544, 6545, 6546, 6547, 6559, 6581, 6582, 6583, 6584, 6631, 6632, 6666, 6667, 6668, 6669, 6671, 6672, 6673, 6674, 6675, 6676, 6681, 6690, 6692, 6693, 6694, 6797, 6798, 6799, 6899, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6954, 6959, 6960, 6964, 6970, 6971, 7246, 7247, 7248, 7250, 7251, 7252, 7253, 7254, 7255, 7256, 7257, 7258, 7269, 7272, 7273, 7275, 7276, 7504, 7505, 7506, 7507, 7508, 7509, 7510, 7511, 7512, 7513, 7514, 7519, 7529, 7533, 7534, 7535, 7536, 7559, 7658, 7661, 7665, 7668, 7669, 7673, 7676, 7677, 7678, 7682, 7684, 7716, 7762, 7776, 7779, 7828, 7829, 7845, 7852, 7882, 7885, 7887, 7891, 7893, 7895, 7897, 7901, 7903, 7904, 7940, 7941, 7942, 7943, 8098, 8099, 8131, 8134, 8138, 8141, 8143, 8149, 8150, 8151, 8152, 8153, 8155, 8156, 8157, 8158, 8222, 8241, 8327, 8328, 8465, 8466, 8467, 8470, 8473, 8474, 8475, 8476, 8477, 8484, 8487, 8488, 8556, 8910, 8914, 8916, 8921, 8923, 8924, 8925, 8926, 8929, 8932, 8933, 8934, 8936, 8937, 8938, 8939, 9311, 9383, 9385, 9388, 9389, 9391, 9394, 9395, 9396, 9399, 9400, 9401, 9402, 9403, 9405, 9406);
-- SQL ошибка [54000]: ОШИБКА: строка слишком велика: размер 9072, максимальный размер 8160
--
-- (2) первый пробел удалён
ALTER TABLE ONLY schemaname_removed.tablename_removed ATTACH PARTITION schemaname_removed.tablename_removed_p21m FOR VALUES IN (21,28, 29, 30, 31, 39, 40, 41, 42, 43, 44, 68, 332, 333, 343, 344, 345, 346, 347, 348, 349, 350, 467, 603, 611, 612, 613, 614, 615, 616, 617, 618, 619, 630, 634, 637, 639, 645, 646, 647, 899, 912, 913, 915, 941, 946, 949, 956, 957, 958, 960, 961, 962, 963, 1026, 1114, 1116, 1138, 1162, 1163, 1187, 1223, 1225, 1359, 1360, 1374, 1391, 1392, 1393, 1405, 1406, 1413, 1741, 1753, 1800, 1801, 1808, 1809, 1841, 1889, 1921, 1941, 1942, 1970, 1971, 1972, 1997, 1999, 2002, 2003, 2008, 2015, 2016, 2019, 2020, 2022, 2023, 2024, 2042, 2043, 2066, 2070, 2076, 2080, 2081, 2129, 2130, 2131, 2132, 2134, 2174, 2197, 2198, 2199, 2200, 2203, 2204, 2205, 2211, 2212, 2213, 2214, 2237, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2312, 2313, 2318, 2319, 2320, 2321, 2322, 2323, 2325, 2326, 2327, 2333, 2334, 2335, 2336, 2346, 2347, 2365, 2371, 2372, 2384, 2385, 2442, 2463, 2464, 2465, 2466, 2492, 2493, 2500, 2501, 2502, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2520, 2535, 2536, 2545, 2563, 2564, 2585, 2586, 2587, 2588, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2668, 2692, 2697, 2698, 2699, 2701, 2702, 2703, 2715, 2730, 2773, 2774, 2783, 2784, 2785, 2786, 2805, 2806, 2812, 2813, 2814, 2815, 2827, 2828, 2832, 2833, 2856, 2887, 2970, 2972, 2973, 2974, 2982, 2986, 2988, 2990, 3029, 3031, 3032, 3058, 3059, 3075, 3076, 3079, 3080, 3081, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3176, 3180, 3185, 3187, 3188, 3190, 3191, 3194, 3198, 3199, 3200, 3201, 3206, 3214, 3215, 3281, 3353, 3373, 3402, 3403, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3431, 3478, 3479, 3480, 3481, 3497, 3498, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3593, 3594, 3595, 3596, 3665, 3666, 3704, 3705, 3706, 3707, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3788, 3796, 3800, 3801, 3804, 3805, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3956, 3964, 3965, 3969, 3972, 3973, 4021, 4083, 4085, 4086, 4090, 4093, 4096, 4098, 4099, 4100, 4103, 4104, 4119, 4122, 4123, 4129, 4130, 4144, 4184, 4185, 4192, 4194, 4195, 4196, 4197, 4199, 4200, 4201, 4225, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4412, 4421, 4423, 4424, 4426, 4429, 4430, 4431, 4432, 4499, 4502, 4555, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4587, 4605, 4606, 4607, 4610, 4612, 4614, 4615, 4636, 4637, 4638, 4652, 4653, 4701, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4866, 4869, 4872, 4873, 4876, 4877, 4878, 4879, 4883, 4884, 4891, 4892, 4919, 5002, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5024, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5065, 5073, 5074, 5076, 5077, 5078, 5082, 5085, 5086, 5087, 5182, 5231, 5232, 5264, 5265, 5266, 5267, 5496, 5497, 5502, 5511, 5512, 5513, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5574, 5575, 5628, 5636, 5637, 5638, 5640, 5646, 5648, 5649, 5650, 5651, 5692, 5696, 5703, 5707, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5781, 5805, 5808, 5810, 5811, 5814, 5816, 5820, 5823, 5824, 5825, 5828, 5833, 5834, 5852, 5853, 5855, 5865, 5866, 5867, 5868, 5910, 5913, 5914, 5938, 5959, 5964, 5975, 5978, 6021, 6022, 6023, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6046, 6094, 6099, 6100, 6105, 6109, 6111, 6113, 6114, 6115, 6116, 6152, 6153, 6158, 6159, 6160, 6161, 6162, 6163, 6164, 6165, 6166, 6174, 6243, 6324, 6325, 6415, 6416, 6527, 6533, 6534, 6539, 6543, 6544, 6545, 6546, 6547, 6559, 6581, 6582, 6583, 6584, 6631, 6632, 6666, 6667, 6668, 6669, 6671, 6672, 6673, 6674, 6675, 6676, 6681, 6690, 6692, 6693, 6694, 6797, 6798, 6799, 6899, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6954, 6959, 6960, 6964, 6970, 6971, 7246, 7247, 7248, 7250, 7251, 7252, 7253, 7254, 7255, 7256, 7257, 7258, 7269, 7272, 7273, 7275, 7276, 7504, 7505, 7506, 7507, 7508, 7509, 7510, 7511, 7512, 7513, 7514, 7519, 7529, 7533, 7534, 7535, 7536, 7559, 7658, 7661, 7665, 7668, 7669, 7673, 7676, 7677, 7678, 7682, 7684, 7716, 7762, 7776, 7779, 7828, 7829, 7845, 7852, 7882, 7885, 7887, 7891, 7893, 7895, 7897, 7901, 7903, 7904, 7940, 7941, 7942, 7943, 8098, 8099, 8131, 8134, 8138, 8141, 8143, 8149, 8150, 8151, 8152, 8153, 8155, 8156, 8157, 8158, 8222, 8241, 8327, 8328, 8465, 8466, 8467, 8470, 8473, 8474, 8475, 8476, 8477, 8484, 8487, 8488, 8556, 8910, 8914, 8916, 8921, 8923, 8924, 8925, 8926, 8929, 8932, 8933, 8934, 8936, 8937, 8938, 8939, 9311, 9383, 9385, 9388, 9389, 9391, 9394, 9395, 9396, 9399, 9400, 9401, 9402, 9403, 9405, 9406);
-- SQL ошибка [54000]: ОШИБКА: строка слишком велика: размер 9064, максимальный размер 8160
--
-- (3) все пробелы удалены
ALTER TABLE ONLY schemaname_removed.tablename_removed ATTACH PARTITION schemaname_removed.tablename_removed_p21m FOR VALUES IN (21,28,29,30,31,39,40,41,42,43,44,68,332,333,343,344,345,346,347,348,349,350,467,603,611,612,613,614,615,616,617,618,619,630,634,637,639,645,646,647,899,912,913,915,941,946,949,956,957,958,960,961,962,963,1026,1114,1116,1138,1162,1163,1187,1223,1225,1359,1360,1374,1391,1392,1393,1405,1406,1413,1741,1753,1800,1801,1808,1809,1841,1889,1921,1941,1942,1970,1971,1972,1997,1999,2002,2003,2008,2015,2016,2019,2020,2022,2023,2024,2042,2043,2066,2070,2076,2080,2081,2129,2130,2131,2132,2134,2174,2197,2198,2199,2200,2203,2204,2205,2211,2212,2213,2214,2237,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2312,2313,2318,2319,2320,2321,2322,2323,2325,2326,2327,2333,2334,2335,2336,2346,2347,2365,2371,2372,2384,2385,2442,2463,2464,2465,2466,2492,2493,2500,2501,2502,2505,2506,2507,2508,2509,2510,2511,2520,2535,2536,2545,2563,2564,2585,2586,2587,2588,2600,2601,2602,2603,2604,2605,2606,2609,2610,2611,2612,2613,2614,2615,2616,2617,2668,2692,2697,2698,2699,2701,2702,2703,2715,2730,2773,2774,2783,2784,2785,2786,2805,2806,2812,2813,2814,2815,2827,2828,2832,2833,2856,2887,2970,2972,2973,2974,2982,2986,2988,2990,3029,3031,3032,3058,3059,3075,3076,3079,3080,3081,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3176,3180,3185,3187,3188,3190,3191,3194,3198,3199,3200,3201,3206,3214,3215,3281,3353,3373,3402,3403,3408,3409,3410,3411,3412,3413,3414,3415,3416,3431,3478,3479,3480,3481,3497,3498,3523,3524,3525,3526,3527,3528,3529,3530,3566,3567,3568,3569,3570,3571,3572,3573,3593,3594,3595,3596,3665,3666,3704,3705,3706,3707,3734,3735,3736,3737,3738,3739,3740,3741,3779,3780,3781,3782,3783,3784,3785,3788,3796,3800,3801,3804,3805,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3946,3947,3948,3949,3950,3951,3952,3953,3956,3964,3965,3969,3972,3973,4021,4083,4085,4086,4090,4093,4096,4098,4099,4100,4103,4104,4119,4122,4123,4129,4130,4144,4184,4185,4192,4194,4195,4196,4197,4199,4200,4201,4225,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4394,4395,4396,4397,4398,4399,4400,4401,4402,4412,4421,4423,4424,4426,4429,4430,4431,4432,4499,4502,4555,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4587,4605,4606,4607,4610,4612,4614,4615,4636,4637,4638,4652,4653,4701,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4866,4869,4872,4873,4876,4877,4878,4879,4883,4884,4891,4892,4919,5002,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5024,5031,5032,5033,5034,5035,5036,5037,5065,5073,5074,5076,5077,5078,5082,5085,5086,5087,5182,5231,5232,5264,5265,5266,5267,5496,5497,5502,5511,5512,5513,5515,5516,5517,5518,5519,5520,5521,5522,5523,5574,5575,5628,5636,5637,5638,5640,5646,5648,5649,5650,5651,5692,5696,5703,5707,5724,5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5781,5805,5808,5810,5811,5814,5816,5820,5823,5824,5825,5828,5833,5834,5852,5853,5855,5865,5866,5867,5868,5910,5913,5914,5938,5959,5964,5975,5978,6021,6022,6023,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6046,6094,6099,6100,6105,6109,6111,6113,6114,6115,6116,6152,6153,6158,6159,6160,6161,6162,6163,6164,6165,6166,6174,6243,6324,6325,6415,6416,6527,6533,6534,6539,6543,6544,6545,6546,6547,6559,6581,6582,6583,6584,6631,6632,6666,6667,6668,6669,6671,6672,6673,6674,6675,6676,6681,6690,6692,6693,6694,6797,6798,6799,6899,6944,6945,6946,6947,6948,6949,6950,6954,6959,6960,6964,6970,6971,7246,7247,7248,7250,7251,7252,7253,7254,7255,7256,7257,7258,7269,7272,7273,7275,7276,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7519,7529,7533,7534,7535,7536,7559,7658,7661,7665,7668,7669,7673,7676,7677,7678,7682,7684,7716,7762,7776,7779,7828,7829,7845,7852,7882,7885,7887,7891,7893,7895,7897,7901,7903,7904,7940,7941,7942,7943,8098,8099,8131,8134,8138,8141,8143,8149,8150,8151,8152,8153,8155,8156,8157,8158,8222,8241,8327,8328,8465,8466,8467,8470,8473,8474,8475,8476,8477,8484,8487,8488,8556,8910,8914,8916,8921,8923,8924,8925,8926,8929,8932,8933,8934,8936,8937,8938,8939,9311,9383,9385,9388,9389,9391,9394,9395,9396,9399,9400,9401,9402,9403,9405,9406);
-- SQL ошибка [54000]: ОШИБКА: строка слишком велика: размер 8904, максимальный размер 8160
Чтобы ‘доказать’, что моя ‘слишком длинная’ партиция работает, вот результат \d
работающей базы данных:
infonova=> \d+ schemaname_removed.tablename_removed
Партиционированная таблица "schemaname_removed.tablename_removed"
[...]
Партиции: schemaname_removed.tablename_removed_p1 FOR VALUES IN (1),
schemaname_removed.tablename_removed_p10000 FOR VALUES IN (10000),
schemaname_removed.tablename_removed_p10001 FOR VALUES IN (10001),
schemaname_removed.tablename_removed_p10002 FOR VALUES IN (10002),
schemaname_removed.tablename_removed_p10003 FOR VALUES IN (10003),
[...]
schemaname_removed.tablename_removed_p2192 FOR VALUES IN (2192),
schemaname_removed.tablename_removed_p21m FOR VALUES IN (21, 28, 29, 30, 31, 39, 40, 41, 42, 43, 44, 68, 332, 333, 343, 344, 345, 346, 347, 348, 349, 350, 467, 603, 611, 612, 613, 614, 615, 616, 617, 618, 619, 630, 634, 637, 639, 645, 646, 647, 899, 912, 913, 915, 941, 946, 949, 956, 957, 958, 960, 961, 962, 963, 1026, 1114, 1116, 1138, 1162, 1163, 1187, 1223, 1225, 1359, 1360, 1374, 1391, 1392, 1393, 1405, 1406, 1413, 1741, 1753, 1800, 1801, 1808, 1809, 1841, 1889, 1921, 1941, 1942, 1970, 1971, 1972, 1997, 1999, 2002, 2003, 2008, 2015, 2016, 2019, 2020, 2022, 2023, 2024, 2042, 2043, 2066, 2070, 2076, 2080, 2081, 2129, 2130, 2131, 2132, 2134, 2174, 2197, 2198, 2199, 2200, 2203, 2204, 2205, 2211, 2212, 2213, 2214, 2237, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2312, 2313, 2318, 2319, 2320, 2321, 2322, 2323, 2325, 2326, 2327, 2333, 2334, 2335, 2336, 2346, 2347, 2365, 2371, 2372, 2384, 2385, 2442, 2463, 2464, 2465, 2466, 2492, 2493, 2500, 2501, 2502, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2520, 2535, 2536, 2545, 2563, 2564, 2585, 2586, 2587, 2588, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2668, 2692, 2697, 2698, 2699, 2701, 2702, 2703, 2715, 2730, 2773, 2774, 2783, 2784, 2785, 2786, 2805, 2806, 2812, 2813, 2814, 2815, 2827, 2828, 2832, 2833, 2856, 2887, 2970, 2972, 2973, 2974, 2982, 2986, 2988, 2990, 3029, 3031, 3032, 3058, 3059, 3075, 3076, 3079, 3080, 3081, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3176, 3180, 3185, 3187, 3188, 3190, 3191, 3194, 3198, 3199, 3200, 3201, 3206, 3214, 3215, 3281, 3353, 3373, 3402, 3403, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3431, 3478, 3479, 3480, 3481, 3497, 3498, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3593, 3594, 3595, 3596, 3665, 3666, 3704, 3705, 3706, 3707, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3788, 3796, 3800, 3801, 3804, 3805, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3956, 3964, 3965, 3969, 3972, 3973, 4021, 4083, 4085, 4086, 4090, 4093, 4096, 4098, 4099, 4100, 4103, 4104, 4119, 4122, 4123, 4129, 4130, 4144, 4184, 4185, 4192, 4194, 4195, 4196, 4197, 4199, 4200, 4201, 4225, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4412, 4421, 4423, 4424, 4426, 4429, 4430, 4431, 4432, 4499, 4502, 4555, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4587, 4605, 4606, 4607, 4610, 4612, 4614, 4615, 4636, 4637, 4638, 4652, 4653, 4701, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4866, 4869, 4872, 4873, 4876, 4877, 4878, 4879, 4883, 4884, 4891, 4892, 4919, 5002, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5024, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5065, 5073, 5074, 5076, 5077, 5078, 5082, 5085, 5086, 5087, 5182, 5231, 5232, 5264, 5265, 5266, 5267, 5496, 5497, 5502, 5511, 5512, 5513, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5574, 5575, 5628, 5636, 5637, 5638, 5640, 5646, 5648, 5649, 5650, 5651, 5692, 5696, 5703, 5707, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5781, 5805, 5808, 5810, 5811, 5814, 5816, 5820, 5823, 5824, 5825, 5828, 5833, 5834, 5852, 5853, 5855, 5865, 5866, 5867, 5868, 5910, 5913, 5914, 5938, 5959, 5964, 5975, 5978, 6021, 6022, 6023, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6046, 6094, 6099, 6100, 6105, 6109, 6111, 6113, 6114, 6115, 6116, 6152, 615
Ответ или решение
Решение проблемы с ошибкой "row is too big" в PostgreSQL при восстановлении партиционированной таблицы
PostgreSQL предлагает множество возможностей, включая партиционирование таблиц, что позволяет управлять большими объемами данных. Однако, бывают ситуации, когда профессионалы сталкиваются с ошибками при восстановлении партиционированных таблиц, такими как "row is too big: size 9000, maximum size 8160". Мы рассмотрим конкретные аспекты вашей проблемы, ответим на поставленные вопросы и предложим возможные решения.
Описание проблемы
Вы экспортировали партиционированную таблицу из базы данных версии 16.3 с помощью pg_dump
. Однако при попытке восстановления этой базы с тем же файлом резервной копии с использованием pg_restore
вы столкнулись с ошибкой, указывающей на то, что размер строки превышает максимальное ограничение. Это могло произойти из-за длинных определений партиций, которые автоматически создаются PostgreSQL в процессе выполнения команды.
Код восстановления, который вызывает эту ошибку:
ALTER TABLE ONLY schemaname_removed.tablename_removed ATTACH PARTITION schemaname_removed.tablename_removed_p21m FOR VALUES IN (21, 28, 29, ...);
Он пытается прикрепить партицию с длинным списком значений, и PostgreSQL выдает ошибку, поскольку он анализирует размер строки в контексте фиксированных ограничений.
Ответы на ваши вопросы
(A) Как может моя база данных иметь определение партиции, которое "слишком большое", но при этом функционировать?
Ваше определение партиции, возможно, было создано в предыдущей версии PostgreSQL (например, 14.10) с другим подходом к ограничению размера строки, который позволяет работать с более широкими значениями. PostgreSQL позволяет создавать партиции, даже если они могут необоснованно превышать предельные значения, поскольку такие определения не проверяются до момента исполнения.
(B) Почему я мог создать эти партиции изначально?
Изменения их обработки в версии 16.3 могли быть связаны с изменением реализации партиционирования в PostgreSQL, а также способами, которыми система хранила метаданные об этих партициях. Апгрейд, как правило, не проверяет каждую партицию на соответствие новому стандарту, кроме критических изменений в структуре таблиц. Вероятно, ваша партиция была создана ранее, и в процессе обновления соотношение с прежней реализацией ограничений не было изменено.
(C) Как я могу решить проблему восстановления без разделения моих партиций?
-
Уменьшите количество значений в условии FOR VALUES. Разбейте ваши значения на несколько партиций с меньшими списками значений, чтобы избежать превышения лимита.
Например:
ALTER TABLE ONLY schemaname_removed.tablename_removed ATTACH PARTITION schemaname_removed.tablename_removed_p21m FOR VALUES IN (21, 28, 29);
-
Увеличьте размер max_identifier_length
. Проверьте параметры конфигурации PostgreSQL и убедитесь, что они оптимальны для вашей версии и потребностей.
-
Используйте UNLOGGED
или TEMPORARY
таблицы. При восстановлении вы можете временно использовать другие формы таблиц для минимизации конфликтов, что позволит избежать ошибок в процессе процесса восстановления.
-
Оптимизируйте схему пронумерованных идентификаторов. Если ваши партиции имеют слабо связанные данные, возможно, имеет смысл пересмотреть стратегию партиционирования. Создание партиций по диапазонам или по временным меткам может оказаться более подходящим вариантом.
В ходе выполнения этих шагов аналитически подбирайте решение, опираясь на специфику заданных данных и требований производительности вашей базы данных.
Заключение
Проблема, с которой вы столкнулись, может быть решена путем изменения способа определения партиций. Основное внимание следует уделить длине условного выражения и общему дизайну партиционированной структуры базы данных. Убедитесь, что ваша система настроена с учетом ближайших версий PostgreSQL и соответствующих требований.