Understanding Data Types and Variables in MSSQL vs PostgreSQL

Lesson 93 of 96


๐Ÿ“Š Data Types Comparison Table

๐Ÿšฉ Category๐ŸŸฆ MSSQL๐ŸŸจ PostgreSQL
Integer TypesINT, BIGINT, SMALLINTINTEGER, BIGINT, SMALLINT, SERIAL
Decimal TypesDECIMAL, NUMERIC, FLOATNUMERIC, REAL, DOUBLE PRECISION
String TypesVARCHAR, NVARCHAR, TEXTVARCHAR, TEXT, CHARACTER
Date/TimeDATETIME, DATE, TIMETIMESTAMP, DATE, TIME, INTERVAL
BooleanBIT (0/1)BOOLEAN (true, false)
BinaryBINARY, VARBINARY, IMAGEBYTEA
Unique IDUNIQUEIDENTIFIERUUID
JSON / ArrayโŒ Not Nativeโœ… JSON, JSONB, ARRAY

๐Ÿงฎ How to Declare and Use Variables

๐ŸŸฆ MSSQL

SQL
DECLARE @Name VARCHAR(100);
SET @Name = 'Himanshu';

-- OR
SELECT @Name = 'Himanshu';

๐ŸŸจ PostgreSQL

SQL
-- Start an anonymous code block using DO and dollar-quoting $$
DO $$
-- Declare the variable section
DECLARE
    -- Declare a VARCHAR variable named 'name' and assign it a value
    name VARCHAR := 'Himanshu';
BEGIN
    -- Display the value of the variable using RAISE NOTICE (used for debugging/output)
    RAISE NOTICE 'Name is %', name;

    -- You can also perform other logic here (loops, conditions, etc.)
END $$;
-- End of the anonymous DO block

๐ŸŒ Local vs Global Variables

๐Ÿ”ง Type๐ŸŸฆ MSSQL๐ŸŸจ PostgreSQL
Local VariableDECLARE @var inside procedures/functionsDECLARE var in DO $$ or function block
Global VariableโŒ Not supported directlyโŒ Not supported directly
WorkaroundUse temp tables or context_info()Use pg_variables extension or SET configs
System Variablesโœ… Uses @@ prefix, e.g., @@ROWCOUNTโœ… Uses SHOW, SET, or current_setting()

๐Ÿ”ง System/Environment Variables

๐ŸŸฆ MSSQL System Variables (@@ prefixed)

VariableDescription
@@VERSIONSQL Server version
@@ROWCOUNTRows affected by last statement
@@IDENTITYLast inserted ID in session
@@ERRORError number of last statement
@@TRANCOUNTCurrent open transactions

๐ŸŸจ PostgreSQL Environment Access

SQL
SHOW server_version;
SELECT current_setting('server_version');
SET work_mem = '32MB';

To create pseudo-global/session-level variables:

SQL
SET my.custom_var = 'hello'; -- needs custom configuration prefix

๐Ÿ” Example: Loop Using Variables

๐ŸŸจ PostgreSQL

SQL
DO $$
DECLARE
    counter INT := 1;
BEGIN
    WHILE counter <= 3 LOOP
        RAISE NOTICE 'Counter = %', counter;
        counter := counter + 1;
    END LOOP;
END $$;

โœจ Real Use Case: Get Last Inserted ID

๐ŸŸฆ MSSQL

Java
INSERT INTO Employees (Name) VALUES ('John');
SELECT SCOPE_IDENTITY() AS LastID;

๐ŸŸจ PostgreSQL

Bash
INSERT INTO Employees (Name) VALUES ('John') RETURNING id;