FAQ форума "PHP и Postgres"

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
FAQ форума "PHP и Postgres"

...находится по адресу http://phpclub.ru/faq/PostgreSql?v=o1n.

Список вопросов на данный момент:

  • * Как подключить PostgreSQL к PHP [a.k.a undefined function pg_connect()]?
    * Как сделать, чтобы PostgreSQL поддерживал русский в кодировке [нужное вписать]?
    * А есть ли аналог phpMyAdmin для PostgreSQL?
    * Миграция с My SQL:
    o как сделать поле auto_increment?
    o аналог mysql_insert_id()?
    o аналог DATE_FORMAT?
    * Как посмотреть список баз / таблиц / полей в таблице?
    * Почему не работает LIMIT?
    * Где взять PostgreSQL под Windows?

 

Romantik

TeaM PHPClub
Для легкости понимания auto_increment добавь статью с "деталей" про PEAR DB
 

confguru

ExAdmin
Команда форума
Гут... Надо написать чтоб задавали вопрос в этом топике
а ты пополнял бы факи...

Начнем....

1. Почему не работает LIMIT 10,20 после смены версии...?
2. Почему PERL работает с Postgres через сокет, а PHP
не может приконнектится...
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Так, про LIMIT добавил.

Для легкости понимания auto_increment добавь статью с "деталей" про PEAR DB
Ну про "лёгкость понимания", это ты загнул. ;)
Кроме того, в статье сказано про SEQUENCE в применении к MySQL.

2. Почему PERL работает с Postgres через сокет, а PHP
не может приконнектится...
А хрен его знает. :D
Встречный вопрос: почему ссылки на faq.phpclub.net нормально не подсвечиваются? Получается <a href="">http://url...</a>

...и DATE_FORMAT миграцию добавить
ОК, сделаю...
 

Breeze

goshogun
Команда форума
Партнер клуба
Про LIMIT:

добавили бы, что совместимый синтаксис у MySQL начиная с версии 4.0.6
 

algo

To the stars!
oid

Возможно, рекомендацию использовать OID следует убрать из FAQ'a. Для соответствующих целей обычно достаточно primary key + currval.

По сообщениям разработчиков, OID deprecated и не будет реализовываться в будущих версиях PostgreSQL, кроме системных таблиц.

Кроме того, использование OID ведет к проблемам. Это не первичный ключ в полном смысле слова... Попробуйте, например,

SELECT oid FROM mytable_vw, где mytable_vw - любое представление(вид).
 

confguru

ExAdmin
Команда форума
Sad Spirit

Поправь плиз ссылки..

http://faq.phpclub.net/practice.pgsql.html
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Fixed. Ссылки стоят на новую версию, изменения, указанные в этом треде, в неё внесены.
 

KR

alive in new life
Не знаю к faq это разделу или нет, но тем не менее.

В mysql есть замечательная его фича CREATE TABLE IF NOT EXISTS. Понятное дело, что данная и все подобные фичи, коих можно навыдумывать туеву хучу (DROP TABLE IF EXISTS, SHOW TABLES и т.д.) в ПГ реализуются с помощью функций и вьюх.

Вопрос собственно в том, что может быть, а точнее наверняка эти функции уже кто-то писал, и в нете есть хранилище этих маленьких приятных фич для ПГ.

Хотелось бы знать где именно.

P.S. по поводу аналога mysql_insert_id было бы неплохо непосредственно в факе сказать, что значение последовательности _обязательно_ необходимо выбирать в одной с инсертом транзакции, а иначе можно наступить на уже потертые чужими лбами грабли.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: KR
В mysql есть замечательная его фича CREATE TABLE IF NOT EXISTS. Понятное дело, что данная и все подобные фичи, коих можно навыдумывать туеву хучу (DROP TABLE IF EXISTS, SHOW TABLES и т.д.) в ПГ реализуются с помощью функций и вьюх.

Вопрос собственно в том, что может быть, а точнее наверняка эти функции уже кто-то писал, и в нете есть хранилище этих маленьких приятных фич для ПГ.
Про show tables принято: напишу про то, где хранятся и как читаются метаданные.

Насчёт остального: найдёшь такое хранилище --- внесу в FAQ.

P.S. по поводу аналога mysql_insert_id было бы неплохо непосредственно в факе сказать, что значение последовательности _обязательно_ необходимо выбирать в одной с инсертом транзакции, а иначе можно наступить на уже потертые чужими лбами грабли.
Можно поподробнее? Мне всегда казалось, что последовательности к транзакциям ортогональны (и это так специально сделано).
 

KR

alive in new life
Автор оригинала: Sad Spirit
Можно поподробнее? Мне всегда казалось, что последовательности к транзакциям ортогональны (и это так специально сделано).
Да, действительно не разглядел в документации
The sequence functions provide simple, multiuser-safe methods for obtaining successive sequence values from sequence objects.

Я хотел сказать, что в случае нескольких практически одновременных INSERT запросов различных клиентов с последующей попыткой получения currval значения последовательности этот самый currval может вернуть одно и тоже число для этих клиентов.
В этом случае транзакция позволяла гарантировать, что мы получим число именно для той записи, которую только что вставили.

-~{}~ 10.11.04 19:35:

Уже не первый день бьюсь с аналогом FOUND_ROWS() mysql
нашел только http://archives.postgresql.org/pgsql-general/2004-05/msg00668.php
Но как оказалось данный подход работает достаточно медленно, либо я не умею правильно использовать курсоры.

Это необходимо для банального постраничного вывода. хотелось бы знать стандартное решение для постгреса.

-~{}~ 10.11.04 20:19:

Красивое решение находится в phpPgAdmin, но думаю вынести его в FAQ лишним не будет.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: KR
Красивое решение находится в phpPgAdmin, но думаю вынести его в FAQ лишним не будет.
ну опиши здесь это решение, или (что ещё лучше) пришли патч для FAQ'а.

а то его обновлять давно пора, займусь скоро.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: Sad Spirit
Про show tables принято: напишу про то, где хранятся и как читаются метаданные.
Есть ли более простой способ узнать список колонок таблицы, чем выполнение запроса вроде:
Код:
select attname as column_name from pg_attribute 
join pg_class on pg_attribute.attrelid=pg_class.oid
join pg_namespace on pg_class.relnamespace=pg_namespace.oid
where pg_attribute.attnum>0

and pg_namespace.nspname='[B]sсhema_name[/B]' 
and pg_class.relname='[B]table_name[/B]'
?

WBR, Grigori
 

neko

tеam neko
в данный момент нет
все шорткаты типа \dt лезут в системные таблицы
afaik в ближайшее время планируется добавить толи вьюхи толи show * для упрощения процедуры
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: neko
afaik в ближайшее время планируется добавить толи вьюхи толи show * для упрощения процедуры
"show *" добавить естественно не планируется, а вьюхи уже есть, лежат в information_schema:
Код:
select column_name 
from information_schema.columns 
where table_name = '...' and
      schema_name = '...';
эта самая information_schema описана в стандарте SQL и поддерживается уже несколькими "большими" продуктами...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
хм ... у меня 7.3 и запрос не выполняется - говорит
Namespace "information_schema" does not exist

может, она появилась с 7.4 - или я чего-то не сделал для установки?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Сверху