1с сервер postgresql установка windows

Пошаговое руководство по установке и первичной настройке сервера 1С:Предприятия 8.3 версии 8.3.19.1229 в ОС Microsoft Windows Server 2019 Standard с использованием СУБД PostgreSQL-11.7-5-1C и системы защиты HASP (USB-ключа).

Подготовка

Запускаем службу Вторичный вход в систему и в свойствах выбираем Запускать автоматически

# services.msc

На машинах, где будет установлено 1С-Предприятие, открываем в блокноте с правами администратора сервера файл C:\Windows\System32\drivers\etc\hosts и допишем в нём:

192.168.1.15	SRV15
  • 192.168.1.15 — IP-адрес сервера
  • SRV15 — имя хоста сервера

Скачиваем с официального ресурса 1С https://releases.1c.ru/ платформу 1c-enterprise-8.3 full (текущую версию) и СУБД postgresql-11.7-5.1C-x64 (или текущую версию).

Установка и настройка СУБД postgresql-11.7-5.1C

Запускаем дистрибутив postgresql-11.7-5.1C(x64) для установки

устанавливаем как сервис и при необходимости меняем пути

инициализируем кластер и устанавливаем пароль для пользователя postgres

Запускаем службу: Пуск — PostgreSQL 11.7-5.1C(x64) — Start Service

Распаковываем архив и в нём запускаем setup.exe

Для установки сервера выбрать компоненты

  • Сервер 1С:Предприятия 8
  • Администрирование сервера 1С:Предприятия
  • Сервер хранилища конфигураций 1С:Предприятия
  • Дополнительные функции администрирования
  • Контроль целостности
  • Интерфейсы на различных языках: Английский и Русский

Выбираем язык интерфейса — Русский

Устанавливаем сервер как сервис и создадим пользователя USR1CV8 и пароль к нему

Устанавливаем драйвер аппаратных ключей защиты

и завершаем установку.

Настройка сервера 1С:Предприятие 8.3

После установки запускаем сервер: Пуск — 1С Предприятие 8 (x86-64) — Запуск сервера x86-64

Регистрирует утилиту администрирования серверов: Пуск — 1С Предприятие 8 (x86-64) — Регистрация утилиты администрирования серверов x86-64

Запускаем консоль администратора: Пуск — 1С Предприятие 8 (x86-64) — Администрирование серверов 1С Предприятия x86-64

на пункте Central 1C:Enterprise 8.3 servers жмём правой кнопкой мыши — Создать — Центральный сервер 1С:Предприятия 8.3

Вводим имя сервера и, если необходимо, описание

Теперь сервер отображается в консоли

Создадим информационную базу

Пропишем имя ИБ, описание, адрес сервера БД: localhost (если сервер развёрнут на той же машине, что и СУБД), имя БД, пользователя postgres и пароль, а также отметим чек-бокс Создать базу данных в случае её отсутствия

и информационная база появилась в оснастке консоли

Теперь вставляем USB-ключ HASP и на всякий случай перезагрузим машину.

Установка и настройка клиента 1С:Предприятие 8.3

Распаковываем архив и в нём запускаем setup.exe

Будут отмечены компоненты:

  • 1С:Предприятие 8
  • Интерфейсы на различных языках — Английский и Русский

Этого вполне достаточно.

Будет создан ярлык 1С Предприятие. Запускаем его и сразу будет предложено добавить информационную базу

Соглашаемся.

Выбираем существующую информационную базу

Выберем тип расположения — На сервере 1С:Предприятия.

Заполним: Кластер серверов: SRV15, Имя информационной базы: db_1c (то же, что и было добавлено в консоли администрирования)

В Версию 1С:Предприятия впишем 8.3, в Разрядность64 (x86_64)

и информационная база появится в списке

Заключение

Если при установке и настройке вышеперечисленных пунктов не возникало никаких сообщений об ошибках, значит настройка прошла корректно. Но нельзя забывать о лицензии — это USB-ключ аппаратной защиты HASP. При работе в 1С-Предприятии его наличие обязательно.

На чтение 3 мин Опубликовано Обновлено

PostgreSQL — это мощная и надежная система управления базами данных с открытым исходным кодом. Она является одной из самых популярных баз данных для системы управления предприятием 1С. Установка PostgreSQL для 1С на операционной системе Windows может быть немного сложной, но с помощью этой пошаговой инструкции вы сможете сделать это без труда.

Шаг 1: Скачивание PostgreSQL

Первым шагом в установке PostgreSQL для 1С на Windows является скачивание установочного пакета с официального сайта PostgreSQL. Выберите соответствующую версию PostgreSQL для вашей операционной системы и скачайте установщик.

Примечание: Убедитесь, что вы скачиваете версию PostgreSQL, совместимую с вашей версией 1С.

Шаг 2: Запуск установки

После того как установочный пакет PostgreSQL был скачан, запустите его и следуйте инструкциям мастера установки. Убедитесь, что вы выбрали «Я согласен с условиями лицензионного соглашения» и выберите каталог для установки PostgreSQL.

Установка PostgreSQL для 1С на Windows

Установка PostgreSQL для 1С на Windows позволяет использовать эту мощную систему управления базами данных в качестве сервера баз данных для 1С:Предприятие. В этой статье будет представлена пошаговая инструкция по установке PostgreSQL на Windows.

Шаг 1: Загрузка PostgreSQL

Перейдите на официальный сайт PostgreSQL (https://www.postgresql.org) и найдите раздел с загрузкой. Загрузите установочный файл PostgreSQL для Windows.

Шаг 2: Запуск установки

Запустите установочный файл PostgreSQL, который вы загрузили на предыдущем шаге. Следуйте инструкциям установщика для выбора языка, установки директории и компонентов, а также настройки пароля для пользователя «postgres».

Шаг 3: Настройка сервера

После завершения установки запустите программу «pgAdmin», которая была установлена вместе с PostgreSQL. В окне «pgAdmin» перейдите к серверу «localhost» и выберите пункт меню «Свойства». В настройках сервера укажите пароль для пользователя «postgres» и настройки безопасности.

Шаг 4: Создание базы данных для 1С

В программе «pgAdmin» нажмите правой кнопкой мыши на сервер «localhost» и выберите пункт меню «Создать» -> «База данных». Введите имя базы данных для 1С и задайте кодировку базы данных в соответствии с требованиями вашей системы.

Шаг 5: Настройка соединения в 1С

Запустите 1С:Предприятие и откройте конфигурацию, в которой вы хотите использовать PostgreSQL в качестве сервера баз данных. Перейдите в настройки соединения и укажите следующие параметры: сервер баз данных — «localhost», имя базы данных — имя базы данных, заданное на предыдущем шаге, пользователь — «postgres», пароль — пароль, заданный для пользователя «postgres».

После выполнения всех шагов PostgreSQL успешно установлен для использования в 1С на Windows.

Шаг Описание
Шаг 1 Загрузка PostgreSQL
Шаг 2 Запуск установки
Шаг 3 Настройка сервера
Шаг 4 Создание базы данных для 1С
Шаг 5 Настройка соединения в 1С

Пошаговая инструкция

Для установки PostgreSQL для 1С на Windows следуйте следующим шагам:

Шаг 1: Скачайте установочный файл PostgreSQL с официального сайта разработчика.
Шаг 2: Запустите скачанный файл и следуйте инструкциям установщика.
Шаг 3: Настройте параметры установки PostgreSQL, указав пароль для пользователя «postgres».
Шаг 4: После завершения установки откройте командную строку и выполните следующую команду: «psql -U postgres». Введите пароль пользователя «postgres».
Шаг 5: Создайте базу данных для 1С с помощью команды «CREATE DATABASE dbname;». Замените «dbname» на имя вашей базы данных.
Шаг 6: Установите расширение для базы данных с помощью команды «CREATE EXTENSION dblink;».
Шаг 7: Установите пароль для пользователя «postgres» с помощью команды «ALTER USER postgres PASSWORD ‘newpassword’;». Замените «newpassword» на новый пароль.
Шаг 8: Завершите настройку PostgreSQL для 1С, выполнив команду «EXIT».

Результаты поиска
«»

Переход с файловой БД на PostgreSQL

Настройка Сервера 1С:Предприятие 8.3 и PostgreSQL 9.4.2-1.1C. Полная инструкция

28 января 2017 ВК
Tw
Fb

В этой инструкции мы расскажем (и покажем) как настроить связку 1С:Предприятие 8.3 и PostgreSQL 9.4.2 с момента установки обоих сервисов, вплоть до создания информационной базы. Про тюнинг данной связки можно прочитать в другой нашей статье.

Этапы, которые нам предстоит пройти:

Установка Сервера 1С:Предприятие (64-bit) для Windows
Установка PostgreSQL 9.4.2-1.1С
Создание Информационной базы данных.

Подробнее под катом!

Вариант использования в качестве сервера баз данных PostgreSQL на windows платформе не очень популярен, но имеет место быть как правило, когда необходимо хоть как-то сэкономить на продуктах от MS. Так же существуют специализированные приложения, которые наилучшим образом работают с PostgreSQL. Для 1с существует модифицированная сборка PostgreSQL дающая как уверяют разработчики сопоставимый с MSSQL уровень производительности и отказоустойчивости. Так ли это на самом деле, проверим на практике :)

1. Установка  PostgreSQL

Качаем с сайта 1с последнюю сборку PostgreSQL 64-bit 9.1.2-1.1C, распаковываем архив, запускаем msi-пакет, тот что без int, имеет не большой размер файла.

Нажимаем Start.

Опции установки оставляем по умолчанию.

Задаем пароль пользователю postgres от которого будет стартовать сервис. Нажимаем Далее. Если установка  PostgreSQL производится впервые, то мастер предложит создать пользователя postgres.

На этапе инициализации БД, выбираем кодировку UTF8. Задаем логин и пароль внутреннему пользователю postgres. Внимание! Пароли пользователя сервиса PostgreSQL  и пароль внутреннего пользователя БД PostgreSQL не должны совпадать. Пароль должен состоять как минимум из четырех символов. Если сервер 1C и  PostgreSQL планируется запускать на разных машинах, то необходимо поставить галочку «Поддерживать соединения с любых IP, а не только с localhost». Нажимаем Далее и еще раз Далее. :)

Нажимаем еще два раза Далее и дожидаемся окончания установки.

Затем идем в Start\All Programs\PostgreSQL 9.1.2-1.1C(x64). Запускаем утилиту администрирования pgAdmin III. Пробуем подключится к БД. Вводим пароль, который указывали во время установки.

И получаем следующую ошибку: Error connecting to the server: FATAL: password authentication failed for user «postgres».

Довольно неожиданно, с учетом того, что пароль был набран верно. Решил поковырять pg_hba.conf, но на первый взгляд там все хорошо.

# TYPE   DATABASE     USER                   ADDRESS               METHOD

# IPv4 local connections:
host                   all             postgres               ::1/128                  md5
host                   all             postgres               127.0.0.1/32             md5
host                   all             postgres               192.168.1.0/24         md5

Решил, поменять метод авторизации с md5 на trust. Перезапускаю сервис и снова пробую подключится к БД. На этот раз получаю такое сообщение.

Действительно на сайте pgAdmin доступна уже более новая версия. После чего подключение к БД завершается успехом!!?!! Помнится, ранее md5 не вызывал подобных проблем, видимо данный глюк действительно связан со старой версией pgAdmin’a.

Теперь можем создать базу для нужд 1С, либо сделать это при помощи самой 1С :)

2. Установка 1C предприятие 8.2.

Для установки отметим, следующие компоненты: 1С:Предприятие, Сервер 1С:Предприятия, Модули расширения веб-сервера, Администрирование сервера 1С:Предприятия.

На этапе, установки «Установить 1С Предприятие как сервис», задаем пароль пользователю USR1C82.

Нажимаем далее, следим за ходом установки :)  Пользователю USR1CV82  при установке должны быть назначены следующие права:

Вход в систему как сервис (Log on as a service), Вход в систему как пакетное задание (Log on as a batch job). Посмотреть можно в Local Computer Policy\Computer Configuration\Windows Setings\Security Setings\Local Policies\User Right Assigments.

Переходим в оснастку Администрирование серверов 1С Предприятие, смотрим что кластер поднялся, и висит на 1541 порту. На вкладке «Рабочие серверы» так же присутствует наш сервер.

Теперь, можно добавить базу на сервер 1С. Для этого переходим на вкладку «Информационные базы» щелкаемся правой кнопкой и выбираем New — Информационная база. Задаем необходимые параметры для подключения к серверу PostgreSQL. Нажимаем ОК.

Запускаем 1С: Предприятие. Выбираем, добавить существующую информационную базу на сервере.

Далее, задаем параметры для подключения. Нажимаем «Далее» и наконец «Готово».

Операцию по созданию базы, можно проделать напрямую из 1С: Предприятия. Для этого при запуске, выбираем пункт «Создание новой информационной базы».

Для подключения клиентов 1С к серверу извне и работы сервера баз данных, на файрволе, должны быть открыты следующие порты:

Агент сервера (ragent) — tcp:1540 Главный менеджер кластера (rmngr) — tcp:1541 Диапазон сетевых портов, для динамического распределения рабочих процессов — tcp:1560-1591, tcp:5432 — Postgresql.  Создадим правило через стандартный интерфейс, либо с помощью команды:

netsh advfirewall firewall add rule name="1Cv8-Server" dir=in action=allow protocol=TCP localport=1540,1541,5432,1560-1590 enable=yes profile=ANY remoteip=ANY interfacetype=LAN

Теперь с другого компьютера мы спокойно запускаем клиент 1С:Предприятия, добавляем существующую информационную базу newdb. Не забываем про лицензии, программной / аппаратной защиты. Теперь, можем загрузить тест Гилева и померить производительность нашей системы.

На VirtualBox с 1Гб памяти, Dual-Core 2.6 GHz, 319-релиз 1с, тест Гилева выдает — 11.42 баллов, примерно так же как на CentOS. На 16.362 чуть больше 11.60 баллов. Оптимизация настроек при помощи EnterpriseDB Tuning Wizard ощутимого прироста (11.66 и 11.62) не дала, хотя возможно в целом польза от него имеется. :)

3. Регламентные работы на сервере PostgreSQL. 

Резервное копирование.

Запускаем утилиту администрирования pgAdmin III, щелкаемся правой кнопкой по нужной базе данных. Выбираем »Резервное копирование».

Выбираем формат (Настраиваемый (степень сжатия от 0 до 9), Tar, Простой, Каталог). По степени сжатия, лучше всего сжимает  «настраиваемый формат» любой степени сжатия, затем «каталог», потом «простой» и наконец «tar». Кодировку указываем UTF8, имя роли postgresql. Все дополнительные опции оставляем по умолчанию. Нажимаем кнопку «Резервная копия». В поле «Сообщения» отображается список всех произведенных операций с кодом завершения. Если 0, то успех. Здесь же можно подсмотреть, как запустить подобную операцию из командной строки.

C:\Program Files (x86)\pgAdmin III\1.16\pg_dump.exe" --host 192.168.1.200 --port 5432 --username "postgres" --role "postgres" --no-password --format custom --blobs --compress 9 --encoding UTF8 --verbose --file "G:\Backups\gilev_dump.backup" "newdb"

Соответственно, скрипт автоматического резервного копирования, который мы добавим в планировщик может выглядеть примерно следующим образом:

"C:\Program Files (x86)\pgAdmin III\1.16\pg_dump.exe" --host 192.168.1.200 --port 5432 --username "postgres" --role "postgres" --no-password --format custom --blobs --compress 9 --encoding UTF8 --verbose --file "G:\Backups\gilev_dump_%date:~0,2%_%date:~3,2%_%date:~6,4%.backup" "newdb"

Восстановление.

Для восстановления, выбираем базу, в которую хотим восстановить данные из резервной копии, желательно в пустую. Щелкаемся правой кнопкой и выбираем «Восстановление». Задаем файл бэкапа, имя роли: postgres, нажимаем «Восстановить»

С помощью командной строки:

"C:\Program Files (x86)\pgAdmin III\1.16\pg_restore.exe" --host 192.168.1.200 --port 5432 --username "postgres" --dbname "testdb" --role "postgres" --no-password --verbose "G:\Backups\gilev_dump_26_09_2012.backup"

где,  testdb — пустая база, в которую восстанавливается архив резервной копии.

Операции по обслуживанию:

Команда VACUUM (Сжатие):

Последовательно чистит все таблицы базы данных, подключенной в настоящий момент, удаляет временные данные и освобождает место на диске. Чаще всего команда VACUUM выполняется именно для получения максимального объема свободного дискового пространства на диске и увеличения скорости доступа к данным.

VACUUM — помечает место, занимаемое старыми версиями записей, как свободное. Использование этого варианта команды, как правило, не уменьшает размер файла, содержащего таблицу, но позволяет не дать ему бесконтрольно расти, зафиксировав на некотором приемлемом уровне. При работе VACUUM возможен параллельный доступ к обрабатываемой таблице. Существует несколько дополнительных опций использования VACUUM : VACUUM FULL,  VACUUM FREEZE,  VACUUM ANALYZE.

VACUUM FULL — пытается удалить все старые версии записей и, соответственно, уменьшить размер файла, содержащего таблицу. Этот вариант команды полностью блокирует обрабатываемую таблицу.

VACUUM FREEZE — Если  VACUUM  FULL удаляет «мусор» из таблиц и перемещает записи так, чтобы таблицы располагались на диске компактно и состояли из наименьшего числа фрагментов, при этом сжатие выполняется долго и блокирует записи,  то VACUUM FREEZE просто удаляет «мусор» из таблиц, но сами записи не перемещает, поэтому выполняется быстрее и не блокирует записи. В настоящий момент эту опцию заменяет autovacuum  — автоматическая сборка мусора в postgresql.conf плюс несколько дополнительных опций расширяющих функциональность:

autovacuum = on # Включает автоматическую сборку мусора.

log_autovacuum_min_duration = -1 # Установка равная нулю регистрирует все действия autovacuum. Минус один (по умолчанию) запрещает вывод в лог. Например, если вы установите значение равное 250 мс, то все действия autovacuum и analyzes, которые работают 250 мс и более, будут заноситься в журнал. Включение этого параметра может быть полезно для отслеживания autovacuum. Этот параметр может быть установлен только в файле postgresql.conf или в командной строке сервера.

autovacuum_naptime = 10min # Время в секундах через которое база данных проверяется на необходимость в сборке мусора. По умолчанию это происходит раз в минуту.

autovacuum_vacuum_threshold = 1800 # Порог на число удалённых и изменённых записей в любой таблице по превышению которого происходит сборка мусора (VACUUM).

autovacuum_analyze_threshold = 900 # Порог на число вставленных, удалённых и изменённых записей в любой таблице по превышению которого запускается процесс анализа (ANALYZE).

autovacuum_vacuum_scale_factor = 0.2 # Процент изменённых и удалённых записей по отношению к таблице по превышению которого запускается сборка мусора.

autovacuum_analyze_scale_factor = 0.1 # То же, что и предыдущая переменная, но по отношению к анализу.

VACUUM ANALYZE —  Если в базе есть таблицы, данные в которых не изменяются и не удаляются, а лишь добавляются, то для таких таблиц можно использовать отдельную команду ANALYZE. Также стоит использовать эту команду для отдельной таблицы после добавления в неё большого количества записей.

Команда ANALYZE (Анализ):

Служит для обновления информации о распределении данных в таблице. Эта информация используется оптимизатором для выбора наиболее быстрого плана выполнения запроса. Обычно команда используется в связке с VACUUM ANALYZE.

Команда REINDEX (переиндексация): 

Используется для перестройки существующих индексов. Использовать её имеет смысл в случае

— порчи индекса;

— постоянного увеличения его размера.

Второй случай требует пояснений. Индекс, как и таблица, содержит блоки со старыми версиями записей. PostgreSQL не всегда может заново использовать эти блоки, и поэтому файл с индексом постепенно увеличивается в размерах. Если данные в таблице часто меняются, то расти он может весьма быстро. Если вы заметили подобное поведение какого-то индекса, то стоит настроить для него периодическое выполнение команды REINDEX. Учтите: команда REINDEX, как и VACUUM FULL, полностью блокирует таблицу, поэтому выполнять её надо тогда, когда загрузка сервера минимальна.

Актуальность использования СУБД PostgreSQL для 1С особенно набирает обороты в последнее время, поскольку не требуется приобретать лицензии MS SQL.

Рассмотрим архитектурное решение, когда СУБД вынесена на отдельную машину, а сервер 1С находится на Windows Server.

Данное архитектурное решение было выбрано по причине того, что обмен между БД настроен через COM-компонент. Если сервер 1С переносить на Linux, то требуется также перенастраивать обмен, который в нашем решении не требуется.

В первую очередь требуется выбрать дистрибутив, на котором будем устанавливать СУБД. Мы выбрали Debian 11.

Минимальные системные требования для установки Postgres Pro, создания кластера баз данных и запуска сервера:

  • Процессор с частотой 1 ГГц.
  • 1 ГБ ОЗУ.
  • 1 ГБ свободного дискового пространства.

Для вспомогательных компонентов или данных потребуется дополнительное дисковое пространство.

Для того чтобы Postgres Pro работал с сервером 1С требуется установить locale ru_RU.UTF-8. Вводим команду:

# dpkg-reconfigure locales

Выбираем пробелом ru_RU.UTF-8 UTF-8 и нажимаем “Enter”. Перезагружаем сервер.

Установка Postgres Pro для работы с 1С

Для работы с 1С существует несколько редакций PostgreSQL, наиболее известные это от компании Postgres Pro и так же от самой 1С.

У нас будет установка Postgres Pro.

  • Заходим на сайт 1c.postgres.ru.
  • Отвечаем на 3 вопроса и в конце заполняем свой e-mail, куда вышлют инструкцию по установки.
  • Вводим команды:
# wget https://repo.postgrespro.ru/pg1c-14/keys/pgpro-repo-add.sh
# apt-get install postgrespro-1c-14
# systemctl status postgrespro-1c-14.service

Проверяем статус Postgres Pro, он должен быть установлен и запущен.

Окно nginx

Рисунок 1 — Успешно запущенная Postgres Pro

Настройка PostgreSQL для работы с 1С

После успешной установки, мы должны настроить СУБД для работы 1С. В первую очередь задаем пароль для внутреннего пользователя Postgres, чтобы подключаться к БД с 1С сервера.

# sudo -u postgres psql -U postgres -c "alter user postgres with password 'postgrespwd';"
ALTER ROLE

Чтобы немного увеличить быстродействие и сократить износ ресурса диска, мы перенесем хранение временной статистики на оперативную память.

По умолчанию, под статистику выделяется 25 мегабайт дискового пространства. Мы выделим 256 мегабайт памяти, чтобы был запас.

Создаем директорию, куда будем добавлять виртуальный диск:

# mkdir /var/lib/pgsql_tmp
 # chown postgres:postgres  /var/lib/pgsql_tmp/

Добавляем в /etc/fstab в конец строчку:

tmpfs /var/lib/pgsql_tmp tmpfs     size=256M,uid=postgres,gid=postgres 0 0

Монтируем диск в систему:

# mount /var/lib/pgsql_tmp

Идем в конфиг БД /var/lib/pgpro/1c-14/data/postgresql.conf и меняем параметр:

stats_temp_directory = '/var/lib/pgsql_tmp'

После успешной настройки перезагружаем службу:

# systemctl restart postgrespro-1c-14.service

Подключение информационной базы 1С к серверу PostgreSQL

Заходим на сервер, где расположена консоль администрирования сервера 1С.

Правой кнопкой мыши нажать на “Информационные базы (Далее ИБ)” > “Создать” > “ИБ”. Заполняем поля:

  • Имя — Test (Как будет называться ИБ).
  • Сервер баз данных: 192.168.74.128 (Адрес нашего сервера postgresql).
  • Тип СУБД: PostgreSQL.
  • База данных: Test (как будет называться БД в СУБД).
  • Пользователь сервера БД: postgres.
  • Пароль пользователя БД: postgrespwd.
  • Если базы нет, то еще поставить “Создать базу данных с случае ее отсутствия”.

Подключаем ИБ для запуска 1С:Предприятия. Заходим в 1С:Предприятие, нажимаем “Добавить”. Ставим “Добавление в список существующей ИБ”. Указываем наименование ИБ. Ставим “На сервере 1С:Предприятия”.

  • Кластер серверов: localhost (Адрес где находится сервер 1С).
  • Имя ИБ: Test (Имя которое мы задавали в оснастке).

Мы добавили ИБ для запуска, можно заходить в конфигуратор и загружать имеющую конфигурацию.

Мы провели успешно установку сервера PostgreSQL на Debian 11.

  • 2012 в систему вошло слишком много пользователей windows server 2012 r2
  • 0xc803fa067 ошибка активации windows 10
  • 2d place скачать бесплатно для windows 10 64 bit
  • 10016 ошибка microsoft windows distributedcom система
  • 360 extreme browser windows xp