Вы имеете в виду размер хранилища таблицы, а не память?
Во-первых, некоторые общие вещи, которые вы должны проверить, чтобы определить проблему:
Установите для log_autovacuum_min_duration
значение, отличное от -1, и посмотрите если сообщения генерируются.
Следите за автовакуумными процессами в pg_stat_activity
. Есть ли какие-нибудь проблемы с таблицей проблем?
Изучите выходные данные
SELECT * FROM pg_stat_user_tables
WHERE relname = 'prablemtable';
Что такое n_live_tup
и n_dead_tup
? Что такое autovacuum_count
и last_autovacuum
?
Я подозреваю, что автовакуум работает, но не может выполнять свою работу, потому что одна из этих трех вещей препятствует его очистке : [1120 ]
Долгосрочные транзакции в состоянии idle in transaction
.
Устаревшие слоты репликации .
Осиротевшие подготовленные транзакции .
Править: Просто сделал некоторый быстрый контроль строки, обеспеченной OP. Небольшой "символ" перед изогнутой фигурной скобкой является UTF-8 B (yte) O (rder) M (ковчег) 0xEF 0xBB 0xBF
. Я не знаю, почему эта последовательность байта отображена как
здесь.
По существу система Вы aquire данные из отправляет закодированный в UTF-8 BOM, предшествующим данным. Необходимо удалить первые три байта из строки перед броском ее в json_decode()
(a substr($string, 3)
сделает).
string(62) "{"action":"set","user":"123123123123","status":"OK"}"
^
|
This is the UTF-8 BOM
Как обнаруженный Kuroki Kaze, этот символ, конечно, является причиной почему json_decode
сбои. Строка в ее данной форме не является правильно форматированной структурой JSON (см. RFC 4627),
"{"action":"set","user":"123123123123","status":"OK"}"
Этот небольшой апостроф в начале - что это? Первый символ после doublequote.
Попробуйте это
$foo = utf8_encode($foo);
$data = json_decode($foo, true);
Что ж, у меня была похожая проблема, и проблема заключалась в волшебных кавычках PHP на сервере ... вот мое решение:
if(get_magic_quotes_gpc()){
$param = stripslashes($_POST['param']);
}else{
$param = $_POST['param'];
}
$param = json_decode($param,true);
Выведите последнюю ошибку json при отладке.
Также используйте функцию json.stringify() для двойной проверки синтаксиса JSON.
json_decode( $so, true, 9 );
$json_errors = array(
JSON_ERROR_NONE => 'Ошибка не произошла',
JSON_ERROR_DEPTH => 'Превышена максимальная глубина стека',
JSON_ERROR_CTRL_CHAR => 'Ошибка управляющего символа, возможно, неправильно закодированного',
JSON_ERROR_SYNTAX => 'Ошибка синтаксиса',
);
echo 'Последняя ошибка : ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL;
У меня был аналогичная проблема, заставила его работать после добавления '' (одинарные кавычки) вокруг строки json_encode. Следуя моему js файлу:
var myJsVar = <?php echo json_encode($var); ?> ; -------> NOT WORKING
var myJsVar = '<?php echo json_encode($var); ?>' ; -------> WORKING
просто подумал о том, чтобы опубликовать его на случай, если кто-то наткнется на этот пост, как я :)