Sql

Postgresql do: PostgreSQL : Документация: 9.5: DO : Компания Postgres Professional

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 LANGUAGE



PostgreSQL
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

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

 

сделать $$ <<первый_блок>> объявить целое число film_count := 0; начинать -- получить количество фильмов выберите количество (*) в число_фильмов из пленки; -- показать сообщение поднять уведомление 'Количество фильмов %', film_count; конец первого_блока $$;

Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)
 

ВНИМАНИЕ: Текущее значение счетчика 1

Кодовый язык: HTTP (http)

Чтобы выполнить блок из pgAdmin, нажмите кнопку «Выполнить», как показано на следующем рисунке:

Обратите внимание, что оператор DO не относится к блоку. Он используется для выполнения анонимного блока. PostgreSQL представил оператор DO , начиная с версии 9.0.

Анонимный блок должен быть заключен в одинарные кавычки, например:

 

'<> объявить целое число film_count := 0; начинать -- получить количество фильмов выберите количество (*) в число_фильмов из пленки; -- показать сообщение поднять уведомление ''Количество фильмов %'', film_count; конец первого_блока';

Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)

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

В разделе объявления мы объявили переменную film_count и установили ее значение равным нулю.

 

film_count целое число := 0;

Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)

Внутри раздела body мы использовали select в с функцией count() , чтобы получить количество фильмов из таблицы film и присвоить результат переменной film_count .

 

выберите количество (*) в число_фильмов из пленки;

Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)

После этого мы показали сообщение, используя оператор поднять уведомление :

 

поднять уведомление 'Количество фильмов %', film_count;

Язык кода: диалект PostgreSQL SQL и PL/pgSQL (pgsql)

% — это заполнитель, который заменяется содержимым переменной 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
    Пароль Пароль Пароль для вашей базы данных
    Database3322229 DataBase3322229 Database33322229 Database33332222222222223. мдб

    Вы должны кодировать специальные символы в процентах.

    Аргументы

    URL-адрес подключения также может принимать аргументы. Вот тот же пример выше со значениями-заполнителями в верхнем регистре для трех аргументов :

     
     

    postgresql://USER:PASSWORD@HOST:PORT/DATABASE?KEY1=VALUE&KEY2=VALUE&KEY3=VALUE

    можно использовать аргументы:

    9 3. 9023. 3. 9023. 3. 9023. 3. 9023. 3. 9023.. для нового подключения из пула 0 означает отсутствие тайм-аута
    Имя аргумента 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
    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 в соответствии со следующей таблицей:

    2
    1 s | десятичное(p,s) 2 9 действительное плавающий , плавающий4

    9013 | серийный номер4
    PostgreSQL (Тип | Псевдонимы) Prisma Поддерживается Атрибут собственного типа базы данных Примечания
    bigint | int8 BigInt ✔️ @db. BigInt * * Сопоставление по умолчанию для BigInt добавлен атрибут типа ema.
    логический | логический логический ✔️ @db.Boolean * * Сопоставление по умолчанию для Bool — в схему не добавлен атрибут типа.
    метка времени с часовым поясом | timestamptz DateTime ✔️ @db.Timestamptz(x)
    11 | время 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.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *