СУБД PostgreSQL

MySQL, PostgreSQL, MSSQL, Oracle и т.д. Диалекты SQL, формирование запросов, хранимые процедуры, тригерры, транзакции и многое другое

СУБД PostgreSQL

Сообщение Vladislav_133 18 ноя 2009, 12:31

Ветка будет посвящена работе с СУБД PostgreSQL
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: СУБД PostgreSQL

Сообщение БорАл 18 ноя 2009, 17:24

Здравсвтуйте. Встала такая проблема. Нужно, чтобы параметры хранимой процедуры:
CREATE OR REPLACE FUNCTION public.tmp
(
rd_nm char,
rd_srnm char,
rd_bd char,
id_st integer,
id_rd integer
)
RETURNS SETOF public.readers AS
$$
DECLARE
rdrs readers%rowtype;
begin
FOR rdrs IN
SELECT * FROM readers
WHERE rd_name=$1 or surname=$2 or id_reader=$5

LOOP
return next rdrs;
END LOOP;
end
$$
LANGUAGE 'plpgsql'

Когда вводятся параметры при запуске, не используя апострофы, то процедура воспринимает их как столбцы. Как сделать так, чтобы вводимые в процедуру параметры понимались как надо? ТО ЕСТЬ как текст, а не как объект таблицы или поле

В posgres'е есть функция convert, как она работает?
Ubuntu Linux 10.04 LTS Netbook Edition; Ubuntu Linux 11.04 Desktop
БорАл
 
Сообщения: 58
Зарегистрирован: 11 ноя 2009, 14:37
Откуда: Из небытия
Полное имя: Алексей aka x_Fafnir_x

Re: СУБД PostgreSQL

Сообщение Vladislav_133 19 ноя 2009, 15:52

Отвечаю на последний вопрос. Функция convert стандартная функция sql.

Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Но я не уверен, что вы поняли проблему. Надо посмотреть.
В вашем примере даже не видно, как эти параметры используются.

Кстати char - это что за тип? Обычно указывается char(n).
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: СУБД PostgreSQL

Сообщение hoskin 20 ноя 2009, 14:03

Как можно объединить несколько записей из таблицы в одну строку типа char(n)? Слышал, что в PostgreSQL это можно сделать всего одним оператором, так ли это?
hoskin
 
Сообщения: 22
Зарегистрирован: 27 окт 2009, 13:28
Полное имя: Иванов Алексей Викторович

Re: СУБД PostgreSQL

Сообщение vovan 21 ноя 2009, 08:31

(<record1>::char(n) || <record2>::char(m) || <record3>::char(k))::char(i)
хотя если запись принадлежит типу char, varchar или text то приводить к другому не обязательно
vovan
 
Сообщения: 27
Зарегистрирован: 07 фев 2009, 16:16
Полное имя: Щеколдин Владимир Викторович

Re: СУБД PostgreSQL

Сообщение hoskin 24 ноя 2009, 18:04

Вопрос скорее о базах данных вообще, чем о PostgreSQL.

О регистрации пользователей. Нужно ли создавать таблицу пользователей и в ней хранить имя и пароль? Или необходимо создвать пользователей базы данных (пользователей сервера другими словами), не используя таблиц в конкретной базе данных.

Второй случай использовать на server_bd мы не можем, у нас нет права создавать пользователей баз данных.
hoskin
 
Сообщения: 22
Зарегистрирован: 27 окт 2009, 13:28
Полное имя: Иванов Алексей Викторович

Re: СУБД PostgreSQL

Сообщение Vladislav_133 24 ноя 2009, 22:06

У вас есть система безопасности Postgresql вот и используйте ее.
Последний раз редактировалось Vladislav_133 30 ноя 2009, 08:16, всего редактировалось 1 раз.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: СУБД PostgreSQL

Сообщение hoskin 26 ноя 2009, 12:16

У вас есть система безопасности Postgresql вот и сипользуйте ее.


В Postgresql можно создавать группы пользователей:

Код: Выделить всё
CREATE GROUP группа [ WITH
[ SYSID идентификатор_группы ]
[ USER пользователь [. ...]]]


отдельных пользователей:
Код: Выделить всё
CREATE USER пользователь
[ WITH [ SYSID uid ]
[ PASSWORD 'пароль' ] ]
[ CREATEDB | NOCREATEDB ]
[ CREATEUSER | NOCREATEUSER ]
[ IN GRDUP группа [. ...] ]
[ VALID UNTIL -срок1 ]


предоставлять пользователям доступ к разным элементам баз данных
Код: Выделить всё
GRANT привилегия [. ...] ON объект [. ...]
ТО { PUBLIC | пользователь | GROUP группа }


Можно ли использовать эти команды в хранимых процедурах? Но это даже не совсем вопрос, это мы сами можем проверить. Но дело в том, что у нас нет права создавать пользователей Postgresql на server_bd. Просим либо открыть доступ, либо указать иной способ разграничения доступа.

Спасибо:)
hoskin
 
Сообщения: 22
Зарегистрирован: 27 окт 2009, 13:28
Полное имя: Иванов Алексей Викторович

Re: СУБД PostgreSQL

Сообщение xdsl 27 ноя 2009, 10:10

В такой ситуации обычно используют собственную таблицу пользователей вида (id,login,password,profile,....), пароль (а иногда даже логин) невосстановимо шифруется (напр. MD5), плюс обеспечивается безопасный канал связи между всеми компонентами приложения от клиента до сервера БД (напр. SSL).
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: СУБД PostgreSQL

Сообщение Vladislav_133 30 ноя 2009, 08:17

Постараюсь сегодня дать вам нужные права.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: СУБД PostgreSQL

Сообщение hoskin 05 дек 2009, 08:32

Чтобы вернуть индекс вставленной записи в MySql есть такая полезненькая функция last_insert_id (извините, если неправильно написал, с MySql мало работал). В постгресе оказывается тоже есть подобная штучка, причем реализуется прямо в sql запросе

Код: Выделить всё
  insert into authors(name) values('Вася')
  returning id_author;


В качестве отдельного запроса это работает, проверено.

Но в хранимых процедурах неет!!! Ошибочка выходит:

Код: Выделить всё
SQL Error: ERROR:  query has no destination for result data
CONTEXT:  PL/pgSQL function "add_temp" line 5 at SQL statement


Надеюсь, я не первый столкнувшийся с проблемой)
hoskin
 
Сообщения: 22
Зарегистрирован: 27 окт 2009, 13:28
Полное имя: Иванов Алексей Викторович

Re: СУБД PostgreSQL

Сообщение Vladislav_133 05 дек 2009, 14:23

Поразбираемся.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: СУБД PostgreSQL

Сообщение vovan 06 дек 2009, 09:40

declare
n integer;
...
begin
...
insert into authors(name) values('Вася') returning id_author into n;
Последний раз редактировалось vovan 09 дек 2009, 15:34, всего редактировалось 5 раз(а).
vovan
 
Сообщения: 27
Зарегистрирован: 07 фев 2009, 16:16
Полное имя: Щеколдин Владимир Викторович

Re: СУБД PostgreSQL

Сообщение hoskin 08 дек 2009, 10:01

Спасибо, Вован. Работает)
hoskin
 
Сообщения: 22
Зарегистрирован: 27 окт 2009, 13:28
Полное имя: Иванов Алексей Викторович


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron