Тип timestamp в Postgresql

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Тип timestamp в Postgresql

Сообщение sm-vasya »

еще раз здрасьте

во первых в Shema нету типа "timestamp with time zone", но вопрос не в этом

создаю в миграции таблицу:

Код: Выделить всё

$this->createTable($tableName, [
                'id' => Schema::TYPE_PK,
                'username' => Schema::TYPE_STRING.'(32) NOT NULL',
                'password' => Schema::TYPE_STRING.'(32) NOT NULL',
                'auth_key' => Schema::TYPE_STRING.'(32) NOT NULL UNIQUE',

                'time_stamp' => 'timestamp with time zone NOT NULL',
        ], $tableOptions);
 
создается поле
time_stamp timestamp(0) with time zone NOT NULL
на сколько я понимаю - timestamp(0) - это timestamp с указанием длины 0

а если все же выполнить sql запрос

Код: Выделить всё

CREATE TABLE table_name (
    id bigint NOT NULL,
    username character varying(32) NOT NULL,
    password character varying(32) NOT NULL,
    auth_key character varying(32) NOT NULL,
    time_stamp timestamp with time zone NOT NULL
);
 
то получается
time_stamp timestamp with time zone NOT NULL
мне кажется что timestamp != timestamp(0)

как быть?

наверное при построении запроса к бд null превращается в 0 ...
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: Тип timestamp в Postgresql

Сообщение R3D3 »

Скорее всего тебе нужен timestamp(0) - это временная метка с точностью до секунд, без хранения дробной части.
timestamp может хранить дробную часть секунды.
Yii Jabber Conference: [email protected]
sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: Тип timestamp в Postgresql

Сообщение sm-vasya »

R3D3 писал(а):Скорее всего тебе нужен timestamp(0) - это временная метка с точностью до секунд, без хранения дробной части.
timestamp может хранить дробную часть секунды.
ну я не спорю что чаще всего достаточно именно этого, но мне не нравится что это решает за меня маленький набор байтиков, и уж тем более не давая возможности на это повлиять.
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: Тип timestamp в Postgresql

Сообщение R3D3 »

Воспроизвел, и действтительно, для схемы postgresql в yii при генерации код для создания таблицы забито соответствие

Код: Выделить всё

timestamp => timestamp(0)
Как я уже написал выше, скорее всего так сделано потому что в 90% случаев разработчику нужен именно timestamp(0) без дробных частей секунды. Если хочется создать колонку с непосредственно указанным типом, есть небольшой workaround:

Код: Выделить всё

$this->createTable($tableName, [
                'id' => Schema::TYPE_PK,
                'username' => Schema::TYPE_STRING.'(32) NOT NULL',
                'password' => Schema::TYPE_STRING.'(32) NOT NULL',
                'auth_key' => Schema::TYPE_STRING.'(32) NOT NULL UNIQUE',

                'time_stamp timestamp with time zone NOT NULL',
        ], $tableOptions); 
Более фундаментальное решение - перекрыть \yii\db\pgsql\QueryBuilder и задать в нем свою карту типов.
Yii Jabber Conference: [email protected]
sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: Тип timestamp в Postgresql

Сообщение sm-vasya »

R3D3 писал(а):
Как я уже написал выше, скорее всего так сделано потому что в 90% случаев разработчику нужен именно timestamp(0) без дробных частей секунды. Если хочется создать колонку с непосредственно указанным типом, есть небольшой workaround:

Спасибо, именно так и сделал.
Ответить