Вопросы по SQL и другие аспекты работы PostgreSQL

warning: Creating default object from empty value in /var/www/victor/web/pgdocs.ru/data/modules/taxonomy/taxonomy.pages.inc on line 33.
Здесь обсуждаются запросы на SQL в PostgreSQL. Оптимизация запросов, реализация, подходы и т.д.

xml+postgresql

Скажите пожалуйста, как вытянуть данные из xml-файла? ну, грубо говоря, превратить в таблицу? и если есть ссылочки, где про это понятно написано, буду признателен. спасибо.

«стоимость» открытия нового соединения к PostgreSQL

Какова «стоимость» открытия нового соединения к PostgreSQL?
Как можно ускорить открытие соединения?

select nametable from nametable

Изображение Dxel

Скажите, а что выводит за бурду Postgresql-8.3 при наборе команды
select tablename from tablename;
там типа содержимое всей таблицы в скобках
Это осмысленное что-то, или каша?

группы и права

Не получается дать права пользователю в группе.
Что делаю (использую ems manager 2007):
1) Создаю группу, даю ей права (например, на select таблицы test)
2) Создаю пользователя, заношу его в группу

В группе появляется юзер, пишется все как надо, мол в группе 1 пользователь. Но так получается, что права группы не даются пользователю (т.е. он остается бесправным). А если руками права дать (в группу не вносить), то все нормально. Где тут могут быть камни?

P.S. В pgAdmin'e тоже самое - показывается что пользователь в группе есть, права у группы выставлены, а работать не хотит((

Доступ только к конкретным строкам.

Мне нужно сделать так, чтобы пользователь мог получить доступ только к строкам, созданным им самим.

Другими словами:
1) Регистрируется пользователь.
2) Он получает доступ на добавление строк в таблицу.
3) Просматривать и редактировать он может только строки, созданные им самим.

Для этого я сделал дополнительный столбец: username

Доступ будет осуществляться через view

SELECT *
  FROM mytable
  WHERE mytable.username = pg_catalog.current_user()
;

Вроде ничего, но как оставить доступ только к этому view'у, а к старой таблице закрыть?

Перевод запросов из MySQL в PostgreSQL: GROUP BY

Здравствуйте!
Перевожу базу на postgresql.
Есть такой запрос для MySQL:
SELECT t.id, t.name, t.size, MIN(p.to_go) AS to_go, COUNT(p.id) as count
FROM torrents t, peers p
WHERE
t.multitracker_on = 1
AND p.torrent = t.id
AND t.ban = 0
AND to_go > 0
GROUP BY p.torrent
ORDER BY added DESC
LIMIT 10
При его выполнении на postgresql выдаёт ошибку: ERROR: колонка "t.id" должна фигурировать в выражении GROUP BY или использоваться в агрегатной функции
Добавил MIN(t.id) вместо t.id, возникает та же ошибка, только для другого поля.

Проблема вывода данных через php

Доброго времени суток.

У меня появилась проблема с БД Postgre. Возникла необходимость сделать web интерфейс для базы данных. Его я выполнил ввиде связки Apache + PHP + PostgreSQL на winXP.
Сервер проверил - все работает. Попытался вывести данные с таблицы путем применения кода:

<?php 

// database access parameters 
// alter this as per your configuration 
$host "192.168.*.*"
$user "user_ro"
$pass "123456"
$db "S_RO"

// open a connection to the database server ?>

DDL + Transaction

Изображение _shaman

Проблема:
Есть функция, которая создаёт 2 таблицы
create table a1... // удачно
create table a2... // возможна неудача
Предположительно, второй запрос выдаст ошибку. Тогда необходимо откатить создание таблицы a1.

Вопрос: поддерживает ли Postgrя откат транзакций, внутри которых был использован DDL? Откатится операция создания таблицы a1 из примера выше или нет, если она была внутри активной транзакции?

Запрос на извлечение списка таблиц и полей

Нашел в инете как получить список всех существующих таблиц в базе:

SELECT tablename FROM pg_tables;

А как получить список полей определенной таблицы?

И вообще, где можно почитать про эти служебные таблицы типа pg_tables и за что они отвечают?

Спасибо!

использование массивов

Всем привет!
Только начал изучать postgresql, так что многого еще не знаю, прошу учесть это при ответах)
Дело такое. Функция заполняет таблицу. В функцию передается список полей и список значений (например, передается одно поле и одно значение этого поля для вставки в таблицу). Передается в двух массивах (name - имена полей таблицы, val - массив значений этих полей)
Я так понимаю, делается это примерно так:

CREATE FUNCTION "public"."%funcname%" (name text [15], val text [15]) RETURNS integer AS
$body$
BEGIN
    INSERT INTO %tablename% (
  			name[1],

Собранный материал

Back to top

(С) Виктор Вислобоков, 2008-2023