DO выполнить анонимный блок кода DO выполнить анонимный блок кода,или,другими словами,процедурный язык переходных функций.
Описание.DO выполняет анонимный блок кода,или,другими словами,переходную анонимную функцию в процедурном языке.Блок кода рассматривается так,как будто это тело функции без параметров с возвратом void.Он разбирается и выполняется один раз.
Знак доллара ($)с последующими цифрами используется для обозначения позиционного параметра в теле определения функции или подготовленного оператора.В других контекстах знак доллара может быть частью идентификатора или строковой константы,заключенной в долларовые кавычки.
PostgreSQL WHILE LOOP оценивает определенное условие,чтобы решить,следует ли завершить цикл или продолжить его выполнение.Если условие,определенное с помощью PostgreSQL WHILE LOOP,равно true,то выполняется тело WHILE LOOP или кодовые операторы,записанные внутри PostgreSQL WHILE LOOP.
Команда PostgreSQL BEGIN используется для инициирования транзакции.Транзакция-это не что иное,как единица работы,выполняемой в базе данных,работа может быть любой-от создания таблиц до их удаления.Команда BEGIN должна быть первым словом транзакции.
DO-выполнение анонимного блока кода
Synopsis
DO [ LANGUAGE lang_name ] code
Description
DO
выполняет анонимный кодовый блок или, другими словами, временную анонимную функцию на процедурном языке.
Блок кода рассматривается, как если бы он был телом функции без параметров, возвращающей void
. Он анализируется и выполняется один раз.
Необязательное предложение LANGUAGE
может быть написано до или после блока кода.
Parameters
code
Код процедурного языка, который нужно выполнить. Это должно быть указано как строковый литерал, как в
CREATE FUNCTION
. Рекомендуется использовать буквальные кавычки в долларах.lang_name
Имя процедурного языка, на котором написан код. Если не указано, по умолчанию используется
plpgsql
.
Notes
Используемый процедурный язык должен быть уже установлен в текущей базе данных с помощью CREATE EXTENSION
. plpgsql
установлен по умолчанию, но другие языки нет.
Пользователь должен иметь привилегию USAGE
для процедурного языка или должен быть суперпользователем, если язык не является доверенным. Это те же привилегии, что и для создания функции на языке.
Если DO
выполняется в блоке транзакции, то код процедуры не может выполнять операторы управления транзакцией. Операторы управления транзакцией разрешены только в том случае, если DO
выполняется в своей собственной транзакции.
Examples
Предоставьте все привилегии для всех представлений в схеме public
роли webuser
:
DO $$DECLARE r record; BEGIN FOR r IN SELECT table_schema, table_name FROM information_schema. tables WHERE table_type = 'VIEW' AND table_schema = 'public' LOOP EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser'; END LOOP; END$$;
Compatibility
В стандарте SQL нет оператора DO
.
See Also
CREATE LANGUAGEPostgreSQL 15.0
-
DELETE
DELETE удаляет строки таблицы DELETE удаляет строки,удовлетворяющие условию WHERE,из указанной таблицы.
-
DISCARD
DISCARD состояние сессии DISCARD освобождает внутренние ресурсы,связанные с сессией базы данных.
-
МЕТОД ПАДЕНИЯ ДОСТУПА
DROP ACCESS METHOD удалить DROP ACCESS METHOD удаляет существующий Не выбрасывайте ошибку,если метод доступа существует.
-
DROP OWNED
DROP OWNED удалить объекты базы данных по ролям DROP OWNED удаляет все объекты в текущей базе данных,которые принадлежат одной из указанных ролей.
- 1
- …
- 559
- 560
- 561
- 562
- 563
- …
- 763
- Next
Структура блоков PL/pgSQL
Резюме : в этом руководстве вы узнаете о блочной структуре PL/pgSQL и о том, как написать и выполнить свой первый блок PL/pgSQL.
PL/pgSQL — это язык с блочной структурой, поэтому функция PL/pgSQL или хранимая процедура организованы в блоки.
Ниже показан синтаксис полного блока в PL/pgSQL:
Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)
[ <
Рассмотрим структуру блока более подробно:
- Каждый блок состоит из двух разделов: объявления и тела. Раздел объявления необязателен, а раздел тела обязателен. Блок заканчивается точкой с запятой (
;
) после ключевого словаEND
. - Блок может иметь необязательную метку, расположенную в начале и в конце. Вы используете метку блока, когда хотите указать ее в
EXIT
оператора тела блока или когда вы хотите уточнить имена переменных, объявленных в блоке. - В разделе объявления вы объявляете все переменные, используемые в разделе тела. Каждый оператор в разделе объявлений завершается точкой с запятой (
;
). - В разделе body вы размещаете код. Каждый оператор в разделе body также завершается точкой с запятой (;).
Пример блочной структуры PL/pgSQL
Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)
сделать $$ <<первый_блок>> объявить целое число film_count := 0; начинать -- получить количество фильмов выберите количество (*) в число_фильмов из пленки; -- показать сообщение поднять уведомление 'Количество фильмов %', film_count; конец первого_блока $$;
Кодовый язык: HTTP (http)
ВНИМАНИЕ: Текущее значение счетчика 1
Чтобы выполнить блок из pgAdmin, нажмите кнопку «Выполнить», как показано на следующем рисунке:
Обратите внимание, что оператор DO
не относится к блоку. Он используется для выполнения анонимного блока. PostgreSQL представил оператор DO
, начиная с версии 9.0.Анонимный блок должен быть заключен в одинарные кавычки, например:
Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)
'<
> объявить целое число film_count := 0; начинать -- получить количество фильмов выберите количество (*) в число_фильмов из пленки; -- показать сообщение поднять уведомление ''Количество фильмов %'', film_count; конец первого_блока';
Однако мы использовали синтаксис строковых констант в долларовых кавычках, чтобы сделать его более читабельным.
В разделе объявления мы объявили переменную film_count
и установили ее значение равным нулю.
Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)
film_count целое число := 0;
Внутри раздела body мы использовали select в
с функцией count()
, чтобы получить количество фильмов из таблицы film
и присвоить результат переменной film_count
.
Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)
выберите количество (*) в число_фильмов из пленки;
После этого мы показали сообщение, используя оператор поднять уведомление
:
Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)
поднять уведомление 'Количество фильмов %', film_count;
%
— это заполнитель, который заменяется содержимым переменной film_count
.
Обратите внимание, что метка first_block
предназначена только для демонстрационных целей. В этом примере он ничего не делает.
Подблоки PL/pgSQL
PL/pgSQL позволяет размещать блок внутри тела другого блока.
Блок, вложенный в другой блок, называется подблоком. Блок, содержащий подблок, называется внешним блоком.
Следующий рисунок иллюстрирует внешний блок и подблок:
Как правило, вы делите большой блок на более мелкие и более логичные подблоки. Переменные в подблоке могут иметь те же имена, что и во внешнем блоке, хотя это и не рекомендуется.
Сводка
- PL/pgSQL — это язык с блочной структурой. Он организует программу в блоки.
- Блок состоит из двух частей: объявления и тела. Часть объявления необязательна, а часть тела обязательна.
- Блоки могут быть вложены друг в друга. Вложенный блок — это блок, помещенный внутрь тела другого блока.
Было ли это руководство полезным?
Коннектор базы данных PostgreSQL (справочный)
Коннектор источника данных PostgreSQL соединяет Prisma с сервером базы данных PostgreSQL.
Пример
Чтобы подключиться к серверу базы данных PostgreSQL, вам необходимо настроить блок источника данных
в файле схемы Prisma:
schema.prisma
1datasource db {
2 Provider = "postgresql"
3 url = env ("Database_url")
4}
Файлы. Указывает коннектор источника данных postgresql
.
URL-адрес
: указывает URL-адрес подключения к серверу базы данных PostgreSQL. В этом случае для предоставления URL-адреса подключения используется переменная среды.Сведения о подключении
URL-адрес подключения
Prisma основана на официальном формате PostgreSQL для URL-адресов подключения, но не поддерживает все аргументы и включает дополнительные аргументы, такие как схема
. Вот обзор компонентов, необходимых для URL-адреса подключения к PostgreSQL:
.
Базовый URL-адрес и путь
Вот пример структуры базового URL-адреса и пути с использованием значений заполнителей в верхнем регистре:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
The following components make up the base URL of your database, they are always required:
Name | Placeholder | Описание | |||||
---|---|---|---|---|---|---|---|
Хост | ХОСТ | IP-адрес/домен вашего сервера базы данных, например. локальный хост | |||||
Порт | ПОРТ | Порт, на котором работает ваш сервер базы данных, например. 5432 | |||||
Пользователь | ПОЛЬЗОВАТЕЛЬ | Имя пользователя вашей базы данных, например. Janedoe | |||||
Пароль | Пароль | Пароль для вашей базы данных | |||||
Database | 3322229 |
Вы должны кодировать специальные символы в процентах.
Аргументы
URL-адрес подключения также может принимать аргументы. Вот тот же пример выше со значениями-заполнителями в верхнем регистре для трех аргументов :
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?KEY1=VALUE&KEY2=VALUE&KEY3=VALUE
можно использовать аргументы:
Имя аргумента | Required | Default | Description | ||
---|---|---|---|---|---|
schema | Yes | public | Name of the schema you want to use, e.g. Myschema | ||
Connection_limit | NO | NUM_CPUS * 2 + 1 | Максимум.0234 | 5 | Максимальное количество секунд до ожидания нового подключения, 0 означает отсутствие тайм -аута |
Pool_timeout | NOM | 9||||
sslmode | Нет | предпочтения | Настраивает, следует ли использовать TLS. Возможные значения: предпочитает , отключает , требует | ||
sslcert | Нет | Путь сертификата сервера. Certificate paths are resolved relative to the ./prisma folder | |||
sslidentity | No | Path to the PKCS12 certificate | |||
sslpassword | No | Password that was used to secure файл PKCS12 | |||
sslaccept | Нет | accept_invalid_certs | Настраивает, следует ли проверять отсутствующие значения в сертификате. Possible values: accept_invalid_certs , strict | ||
host | No | Points to a directory that contains a socket to be used for the connection | |||
socket_timeout | No | Maximum number of seconds to wait until a single query terminates | |||
pgbouncer | No | false | Configure the Engine to enable PgBouncer compatibility mode | ||
application_name | No | Начиная с версии 3.3.0: указывает значение параметра конфигурации application_name | |||
channel_binding | Нет | предпочитает | Начиная с версии 4. 8.0: указывает значение параметра конфигурации channel_binding. |
Например, если вы хотите подключиться к схеме с именем myschema
, установите размер пула соединений на 5
и настройте время ожидания для запросов 3
секунд. Вы можете использовать следующие аргументы:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=myschema&connection_limit=5&socket_timeout=3
Настройка соединения SSL
Вы можете добавлять различные параметры к соединению URL, если ваш сервер базы данных использует SSL. Вот обзор возможных параметров:
URL-адрес вашего подключения к базе данных будет выглядеть следующим образом:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?sslidentity=client-identity.p12&sslpassword=mypassword&sslcert=rootca. сертификат
Подключение через сокеты
Чтобы подключиться к вашей базе данных PostgreSQL через сокеты, вы должны добавить поле host
в качестве параметра запроса к URL-адресу подключения (вместо того, чтобы устанавливать его как часть host
URI ). Затем значение этого параметра должно указывать на каталог, содержащий сокет, например: postgresql://USER:PASSWORD@localhost/database?host=/var/run/postgresql/
Обратите внимание, что localhost
требуется , само значение игнорируется и может быть любым.
Примечание : вы можете найти дополнительный контекст в этой проблеме GitHub.
Сопоставление типов между PostgreSQL и схемой Prisma
Коннектор PostgreSQL сопоставляет скалярные типы из модели данных Prisma с собственными типами столбцов следующим образом:
В качестве альтернативы см. справочник по схеме Prisma для сопоставлений типов, организованных по типу Prisma.
Миграция Prisma
Prisma | PostgreSQL |
---|---|
String | text |
Boolean | boolean |
Int | integer |
BigInt | bigint |
Число с плавающей запятой | Двойная точность |
Десятичное число | Десятичное число (65,30) |
DateTime | timestamp(3) |
Json | jsonb |
Bytes | bytea |
Native type mappings
При анализе базы данных PostgreSQL типы баз данных сопоставляются с Prisma в соответствии со следующей таблицей:
PostgreSQL (Тип | Псевдонимы) | Prisma | Поддерживается | Атрибут собственного типа базы данных | Примечания | |
---|---|---|---|---|---|
bigint | int8 | BigInt | ✔️ | @db. BigInt * | * Сопоставление по умолчанию для BigInt добавлен атрибут типа ema. | |
логический | логический | логический | ✔️ | @db.Boolean * | * Сопоставление по умолчанию для Bool — в схему не добавлен атрибут типа. | |
метка времени с часовым поясом | timestamptz | DateTime | ✔️ | @db.Timestamptz(x) | 1 | 1 | время | DateTime | ✔️ | @db.Time(x) |
время с часовым поясом | timetz | DateTime | ✔️ | @db. Timetz(x) | ||
десятичное | ✔️ | @db.Decimal(x, y) | плавающий | ✔️ | @db.Real |
двойная точность | float8 | Float | ✔️ | @db.DoublePrecision * | ||
smallint | int2 | Int | ✔️ | @db.SmallInt | ||
целое число | int , int4 | Int | ✔️ | @db. Int * | *Атрибут type1 по умолчанию для Intschema * | добавлен для 12. |
малый серийный номер | serial2 | Int | ✔️ | @db.SmallInt @default(autoincrement()) | Int | ✔️ | @db.Int @default(autoincrement()) |
bigserial | serial8 | Int | ✔️ | @db.BigInt @default(autoincrement() | ||
character(n) | char(n) | String | ✔️ | @db.Char(x) | ||
переменный символ(n) | varchar(n) | String | ✔️ | @db. VarChar(x) | ||
money | Decimal | ✔️ | @db.Money | ||
Текст | Строка | ✔ | @DB.Text * | * НЕКОТОРЫЕ МАСПЛЕКТЫ ФАТА - * | 3 * НЕФОРКА. |
TimeStamp | DateTime | ✔ | @DB.Timestamp * | * kefplaby MAPIBUT для DATEM . | |
date | DateTime | ✔️ | @db.Date | ||
enum | Enum | ✔️ | N/A | ||
inet | String | ✔️ | @db. Inet | ||
bit(n) | String | ✔️ | @Bit(x) | ||
bit varying(n) | String | ✔️ | @VarBit | ||
oid | Int | ✔️ | @db.Oid | ||
uuid | String | ✔️ | @db.Uuid | ||
json | Json | ✔️ | @DB.JSON | ||
JSONB | JSON | ✔ | 3 | . 0013 - в схему не добавлен атрибут типа. | |
BYTEA | BYTE | ✔ | @DB.BYTEA * | * QUALPAPPOR. | |
xml | String | ✔️ | @db.Xml | ||
Array types | [] | ✔️ | |||
citext | Строка | ✔️* | @db.Citext | * Только если расширение Citext доступно. | |
interval | Unsupported | Not yet | |||
cidr | Unsupported | Not yet | |||
macaddr | Unsupported | Not yet | |||
tsvector | Unsupported | Not yet | |||
tsquery | Unsupported | Not yet | |||
int4range | Не поддерживается | Еще не | |||
int8range | Не поддерживается | Not yet | |||
numrange | Unsupported | Not yet | |||
tsrange | Unsupported | Not yet | |||
tstzrange | Не поддерживается | Пока нет | |||
Диапазон дат | Не поддерживается | Not yet | |||
point | Unsupported | Not yet | |||
line | Unsupported | Not yet | |||
lseg | Без поддержки | Еще нет | |||
Коробка | Без поддержки | Еще нет | |||
path | Unsupported | Not yet | |||
polygon | Unsupported | Not yet | |||
circle | Unsupported | Еще нет | |||
Составные типы | н/д | Еще нет | |||
Типы доменов | n/a | Not yet |
Introspection adds native database types that are not yet supported as Unsupported
fields:
schema.